मैंने एक फ़ाइल से एक पंक्ति पढ़ने के लिए यह फ़ंक्शन लिखा है:
const char *readLine(FILE *file) {
if (file == NULL) {
printf("Error: file pointer is null.");
exit(1);
}
int maximumLineLength = 128;
char *lineBuffer = (char *)malloc(sizeof(char) * maximumLineLength);
if (lineBuffer == NULL) {
printf("Error allocating memory for line buffer.");
exit(1);
}
char ch = getc(file);
int count = 0;
while ((ch != '\n') && (ch != EOF)) {
if (count == maximumLineLength) {
maximumLineLength += 128;
lineBuffer = realloc(lineBuffer, maximumLineLength);
if (lineBuffer == NULL) {
printf("Error reallocating space for line buffer.");
exit(1);
}
}
lineBuffer[count] = ch;
count++;
ch = getc(file);
}
lineBuffer[count] = '\0';
char line[count + 1];
strncpy(line, lineBuffer, (count + 1));
free(lineBuffer);
const char *constLine = line;
return constLine;
}
फ़ंक्शन फ़ाइल को सही ढंग से पढ़ता है, और प्रिंटफ़ का उपयोग करके मैं देखता हूं कि कॉन्स्टेलिन स्ट्रिंग को सही तरीके से पढ़ा गया।
हालाँकि, अगर मैं फ़ंक्शन का उपयोग करता हूं जैसे कि:
while (!feof(myFile)) {
const char *line = readLine(myFile);
printf("%s\n", line);
}
प्रिंटफ जिबरिश का उत्पादन करता है। क्यों?
fgets
बजाय का उपयोग करेंfgetc
। आप लाइन द्वारा लाइन के बजाय चरित्र द्वारा चरित्र पढ़ रहे हैं।