在C文件处理中的feof()

sud*_*03r 3 c file-handling feof

我正在逐字节读取二进制文件,我需要确定是否已达到eof.

feof()不起作用"只有在对不存在的字节进行读取请求时才设置eof".所以,我可以使用我的自定义check_eof:

if ( fread(&byte,sizeof(byte),1,fp) != 1) {
    if(feof(fp))
    return true;
}
return false;
Run Code Online (Sandbox Code Playgroud)

但问题是,如果没有达到eof,我的文件指针会向前移动一个字节.因此,解决方案可能是使用ftell()然后fseek()将其置于正确的位置.

另一种解决方案可能是在一些临时存储中缓冲前面的字节.

更好的解决方案?

jam*_*lin 6

如果您一次只读取一个字节,那么执行此操作的惯用方法是fgetc:

int c;
while ((c = fgetc(fp)) != EOF) {
   // Do something.
}
Run Code Online (Sandbox Code Playgroud)

然后你不应该处理feof.

  • 您仍然需要处理 feof (或ferror)。当循环终止时,您需要检查它是否因到达文件末尾而终止,或者是否存在读取错误。做到这一点的唯一方法是使用其中一个函数。(除非你不关心报告错误。) (2认同)