在C语言中,使用fgets正确读取文本文件直到EOF的方式是什么?我现在有这个(简化版):
char line[100 + 1];
while (fgets(line, sizeof(line), tsin) != NULL) { // tsin is FILE* input
... //doing stuff with line
}
具体来说,我在想是否应该将其他内容作为while条件?从文本文件解析到“行”的过程是否必须在while条件中执行?
在C语言中,使用fgets正确读取文本文件直到EOF的方式是什么?我现在有这个(简化版):
char line[100 + 1];
while (fgets(line, sizeof(line), tsin) != NULL) { // tsin is FILE* input
... //doing stuff with line
}
具体来说,我在想是否应该将其他内容作为while条件?从文本文件解析到“行”的过程是否必须在while条件中执行?
NULL
即可。同时,解析进入 while循环体内。fgets
的返回值作为测试本身,例如:char line[100 + 1] = ""; /* initialize all to 0 ('\0') */
while (fgets(line, sizeof(line), tsin)) { /* tsin is FILE* input */
/* ... doing stuff with line */
}
fgets
会在成功时返回一个指向line
的指针,或者在失败时(由于任何原因)返回NULL
。有效的指针将测试为true
,当然,NULL
将测试为false
。line
是在范围内声明的字符数组,以使用sizeof line
作为长度。如果line
只是指向数组的指针,则您只读取sizeof(char *)
个字符)line[]
除了样式/调试之外没有太大的价值。你看到其他的价值吗? - chux - Reinstate Monicawhile (fgets(...))
会失败的平台示例?我很好奇,我还没有遇到过这种情况。 - David C. Rankin
我之前也遇到过同样的问题,我是这样解决的
while (fgets(line, sizeof(line), tsin) != 0) { //get an int value
... //doing stuff with line
}
while (fgets(line, sizeof(line), tsin)) {...}
,让fgets
的返回值作为测试条件即可。一个有效的指针会被判断为真
,而NULL
则会被判断为假
。 - David C. Rankin