2012-01-15 10 views
7

नई स्ट्रिंग समाप्त नहीं सी में फ़ाइलों को, fread के माध्यम से एक फ़ाइल पढ़ने का प्रयाससमारोह fread द्वारा 0

यहाँ फ़ाइल की सामग्री है:

line1 how 

कोड का प्रयोग किया:

char c[6]; 
fread(c,1,5,f1) 

var 'c' को आउटपुट करते समय, सामग्री अंत में एक यादृच्छिक चरित्र के साथ दिखाई देती है (उदाहरण: लाइन 1 *)

एफ स्ट्रिंग को समाप्त न करें या क्या मुझे कुछ याद आ रहा है?

+1

'फ़्रेड' केवल बाइट्स में बाइट्स को पढ़ता है। यह किसी स्ट्रिंग को कॉल करने के बारे में कुछ भी नहीं जानता है। रुचि रखने वालों के लिए –

उत्तर

10

सं। fread फ़ंक्शन बस कई तत्वों को पढ़ता है, इसमें "तार" की कोई धारणा नहीं है।

  • आप NUL टर्मिनेटर जोड़ सकते हैं अपने आप को
  • आप fgets/fscanf उपयोग कर सकते हैं बजाय

व्यक्तिगत तौर पर मैं fgets साथ जाना होगा।

+0

, fgets से नई लाइन को हटाने के लिए एक उदाहरण कार्यान्वयन यहां दिया गया है: http://stackoverflow.com/questions/2693776/removing-trailing-newline-character-from-fgets- इनपुट –

2

man page for fread फ़ाइल के अंत में शून्य समाप्त करने के बारे में कुछ भी नहीं कहता है।

यदि आप सुरक्षित होना चाहते हैं, तो अपने सी सरणी में सभी बाइट्स को शून्य होने के लिए प्रारंभ करें (bzero या उसके जैसा कुछ) और जब आप पढ़ते हैं, तो आपके पास एक समाप्ति शून्य होगी।

मैंने दो मैन पेजों को fread और bzero से जोड़ा है और मुझे उम्मीद है कि आपकी मदद करता है।

1

क्षमा करें मैं पार्टी के लिए थोड़ा देर हो चुकी हूं।

नहीं, फ़्रेड आपके लिए यह संभाल नहीं करता है। यह मैन्युअल रूप से किया जाना चाहिए। सौभाग्य से यह मुश्किल नहीं है। मैं बहुत तरह NUL स्थापित करने के लिए fread() के बदले उपयोग करना चाहते:

char buffer[16+1]; /*leaving room for '\0' */ 
x = fread(buffer, sizeof(char), 16, stream); 
buffer[x]='\0'; 

और अब आप अपने आप को एक \ 0 समाप्त स्ट्रिंग है, और एक बोनस के रूप में, हम एक गंधा चर x, जो वास्तव में है अगर हमें कभी बाद में इसकी आवश्यकता होती है तो हमें स्ट्रेल() चलाने की परेशानी बचाती है। साफ!

संबंधित मुद्दे