while (feof(file))逐行读取文件语句使用注意

简单来说,直接使用while (!feof(file))来逐行读取txt是错误的,会在逐行读取文件的末尾比文件内容多一行。至于读取到什么,看你的buffer有没有每次做memset,如果有那么读取到空的;如果没有,读取到上一行的数据。

原理上,feof()操作是主动去查看文件流指针file是否到达了EOF。执行这个判断时并没有“进行下一次读取”。因此,即便已经读取完了文件最后一行,因为feof()不会把文件流指针file前移,因此得到的判断仍然是“现在不是EOF”。进而执行下一行的读取(不正确的读取)。

其实文件系统也好,并发也好,我们应该直接去读取,然后判断读取后的返回值是否为EOF或别的;而不是先去查询当前是否为EOF,然后再读取。

逐行读取txt文件
可参考:

#include <stdio.h>
#include <string.h>
 
int main(){
    FILE* fp = fopen("/home/.../abc.txt", "r");//文件路径
 
    char line[1024];
 
    void* ret;
    while(1) {
        memset(line, 0, sizeof(line));
        ret = fgets(line, sizeof(line), fp);
        if(ret==NULL) break;
        line[strlen(line)-1] = '\0'; // trim '\n'
        printf("line is: %s!\n", line);
    }
 
    fclose(fp);
 
    return 0;
}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值