【问题标题】:fseek on EOF characterfseek 在 EOF 字符上
【发布时间】:2012-11-08 14:50:10
【问题描述】:

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

但我需要在此循环的两次迭代中检测EOF。 我知道 EOF 无法使用 ungetc() 返回到流。

如何使用

fseek(file, -1, SEEK_CUR)

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

谢谢。

【问题讨论】:

    标签: c eof fseek


    【解决方案1】:

    你可以使用

    fseek(file, 0, SEEK_END)
    

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

    编辑:

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

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

    请注意 fseek(作为注释,因为我相信这不是您的情况):Using fseek to backtrack

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 这个循环在函数内部(词法分析),我需要这个循环独立于前面的字符来检测它作为下一个标记。
      猜你喜欢
      • 2020-08-12
      • 1970-01-01
      • 1970-01-01
      • 2014-05-29
      • 2017-02-28
      • 1970-01-01
      • 1970-01-01
      • 2011-09-30
      • 1970-01-01
      相关资源
      最近更新 更多