ฉันเขียนฟังก์ชันนี้เพื่ออ่านบรรทัดจากไฟล์:
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;
}
ฟังก์ชั่นอ่านไฟล์ได้อย่างถูกต้องและใช้ printf ฉันเห็นว่าสตริง constLine ก็อ่านได้อย่างถูกต้องเช่นกัน
อย่างไรก็ตามถ้าฉันใช้ฟังก์ชั่นเช่นนี้:
while (!feof(myFile)) {
const char *line = readLine(myFile);
printf("%s\n", line);
}
printf เอาท์พุทซึ่งพูดพล่อยๆ ทำไม?
getline()
นี่เป็นส่วนหนึ่งของ POSIX 2008 อาจมีแพลตฟอร์มคล้าย POSIX โดยไม่ต้องใช้โดยเฉพาะอย่างยิ่งหากไม่รองรับ POSIX 2008 ที่เหลือ แต่ภายในโลกของระบบ POSIX getline()
จะสามารถพกพาไปได้ทุกวันนี้
fgets
fgetc
คุณกำลังอ่านตัวอักษรโดยตัวละครแทนบรรทัดโดยบรรทัด