c - 如何确定文件的结尾?
问题描述
如何确定文件的结尾?
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在这种情况下不起作用?
解决方案
该fgetc
函数返回一个int
,并且该值将EOF
在文件末尾。这是典型的做法:
int c;
while ((c = fgetc(cfl)) != EOF) {
...
}
推荐阅读
- cypress - Cypress - 带有请求有效负载的 API 调用 - 如何在代码中处理有效负载
- coq - 对于 Coq 中的异构列表,是否可以证明与 Forall_inv 等效?
- c# - Oracle c# 大容量复制Datatable
- android - 未处理的异常:SocketException:操作系统错误:连接被拒绝,errno = 111,地址 = 127.0.0.1,端口 = 40712
- c++ - 在每个元音上添加字符
- ios - 当我们尝试使用 Appium 脚本导航到 iPhone safari 浏览器中的框架时,获取异常阻止了一个具有原点的框架
- django - Ajax 请求导致内部服务器错误
- sql - 为什么我不能使用带有任何“o*”变体的 SQL Contains()?
- c++ - 在依赖项之间切换
- python - Django中的强制性一对多关系