【发布时间】:2019-02-01 23:29:57
【问题描述】:
如何判断文件结束?
FILE* cfl;
if ((cfl=fopen(csv, "r")) == NULL) {
printf("Cannot open file for read.\r\n");
exit(1);
}
while (!feof(cfl)) {
int i = 0;
char* buf = (char*)malloc(sizeof(char));
while ((buf[i] = fgetc(cfl)) != '\n') {
i++;
buf = (char*)realloc(buf, sizeof(char)*(i+1));
printf("=%d= ", i);
}
buf[i] = '\0';
printf("+%d+ ", i);
printf("%s\r\n", buf);
free(buf);
}
fclose(cfl);
一切正常到最后一行。由于文件在最后一个换行符后结束,所以程序循环在while ((buf[i] = fgetc(cfl)) != '\n') {...}
我可以在检查"i"是否不超过某个大值后中断循环,但会出错。如何正确判断文件的结尾以及为什么 feof 在这种情况下不起作用?
【问题讨论】:
-
在内部 while 循环中根本不检查 endof 文件。
-
另外,
fgetc()返回int,而不是char。如果将fgetc()的结果读入char,则无法可靠地检测到EOF。 -
不确定是不是骗子
-
与您的问题没有直接关系,但是为您正在读取的每个字符重新分配一个新的缓冲区是非常低效的。您应该重新分配至少 64 KB 的块。
标签: c