关于EOF角色的fseek

时间:2012-11-08 14:50:11

标签: c eof fseek

我目前正在循环中使用fgetc()来读取整个文件。

但是我需要在这个循环的两次迭代中检测EOF。 我知道EOF无法使用ungetc()返回流。{/ p>

使用

怎么样?
fseek(file, -1, SEEK_CUR)

使用EOF fseek之前获取是否安全且便携并再次阅读?

感谢。

2 个答案:

答案 0 :(得分:1)

在大多数操作系统上,EOF不是文件中存在的物理字符。它只是一个虚拟的“带外”字符,fgetc()正在返回,表示没有更多的输入。

为什么你需要再次获得EOF?文件中没有更多数据,那么“备份”再次点击文件结尾有什么意义呢?

答案 1 :(得分:0)

您可以使用

fseek(file, 0, SEEK_END)

如果您尝试阅读它,您将获得第二个EOF。

修改

更仔细地阅读参考文献:“允许库实现无意义地支持SEEK_END(因此,使用它的代码没有真正的标准可移植性)。”

我想你的解决方案在便携性方面是最好的。

请小心fseek(作为注释,因为我认为这不是你的情况):Using fseek to backtrack