feof的陷阱

feof函数

The function feof() tests the end-of-file indicator for the stream pointed to by stream, returning nonzero if it is set.

feof是用于测试当前是否文件末尾。若是末尾返回非0值。

例子

// test.c    
#include <stdio.h>

int main()
{
    FILE *f = fopen("empty_file", "rb");
    if (f == NULL) {
        return -1;
    }
    while (!feof(f)) { // 判断是否文件末尾,若不是读取一个字节,然后输出
        char c;
        int ret = fread(&c, 1, 1, f);
        printf("%d-%x\n", ret, c);
    }
    printf("eof\n");
}

执行命令:

touch empty_file #创建空文件
gcc -o test test.c # 编译上述文件
localhost:~/Desktop$ ./test 
0-75 #执行结果:fread返回值 和 c的值
eof
localhost:~/Desktop$ ./test 
0-ffffffb6 #执行结果:fread返回值 和 c的值
eof
ocalhost:~/Desktop$ ./test 
0-34 #执行结果:fread返回值 和 c的值
eof

从上面例子可以看到,对于空文件来说,feof第一次返回值为0,即为非文件末尾,在使用fread读取文件时返回值为0,表示没有读到内容,第二次feof返回值为非0,退出while循环。

总结

打赏

取消

感谢您的支持!

扫码支持
扫码支持
扫码打赏,您说多少就多少

打开支付宝或微信扫一扫,即可进行扫码打赏哦