0

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

但我需要EOF在这个循环的两次迭代中检测。我知道EOF不能使用ungetc().

怎么用

fseek(file, -1, SEEK_CUR)

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

谢谢。

4

2 回答 2

1

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

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

于 2012-11-08T14:52:40.657 回答
1

您可以使用

fseek(file, 0, SEEK_END)

如果您尝试从中读取,您将获得第二个 EOF。

编辑:

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

我想您的解决方案在可移植性方面是最好的。

小心 fseek (作为一个注释,因为我相信这不是你的情况):使用 fseek 回溯

于 2012-11-08T15:34:39.463 回答