【问题标题】:Common misconception : Files have an EOF char at their end常见误解:文件末尾有一个 EOF 字符
【发布时间】:2012-03-28 12:23:55
【问题描述】:

我正在阅读“卡特的 PC 汇编语言”,我在第 32 页的脚注中看到了这句话,这让我很困惑!
如果我们假设文件的结尾可能没有 EOF(正如书中所说)是正确的陈述,那么我们如何才能确定文件的结尾在哪里?
并且还产生了另一个问题:fseek 是否使用 EOF 在文件中来回切换?

【问题讨论】:

  • 所有文件都有大小。如果您从第一个字节读取到最后一个字节(如文件大小所示),则您已到达文件末尾。没有特殊的 字符 标记文件的结尾(考虑尝试读取二进制数据,文件结尾字节与任何其他字节有何不同?)。
  • 混淆可能是 EOF 本身只是“文件结束”的缩写,因此它可能意味着很多东西:ASCII 字符 0x1A,打开文件读取器达到的条件最后,函数eof()或其结果,非字符常量EOF
  • @JoachimPileborg 只是为了好玩,您应该创建一个中间有 \x1A 的文本文件,然后从命令行中 type 它。
  • @MrLister 我知道,在 Windows 中从文本文件中读取会检查 CTRL-Z(即字节 0x1a)作为特殊的文件结尾字符。不会使其成为真正的文件结尾。
  • @JoachimPileborg 不,但恐怕这就是很多混乱的来源。您可以拥有一个存储在文件中并标记 EOF 的 EOF 字符,即使它的 ASCII 名称不是“EOF”!

标签: c file eof


【解决方案1】:

PC => ^Z : EOF

在早期的 PC 时代,ctrl-Z 是 EOF 文件中的信号。

在 UNIX 和其他现代系统下:读取 stat.st_size 后面后,发出 EOF 信号

【讨论】:

    【解决方案2】:

    来自http://www.drpaulcarter.com/cs/common-c-errors.php

    这个值是多少? EOF 学生的一个常见误解是 文件末尾有一个特殊的 EOF 字符。没有什么特别的 存储在文件末尾的字符。 EOF 是一个整数错误代码 由函数返回。

    【讨论】:

    • 这只是告诉我这些人不知道^Z。
    【解决方案3】:

    嗯,EOF 没有存储在文件末尾,也不是charEOF 是一条错误消息,当没有更多数据要读取时,读取函数会返回。这就是getchar 返回int 的原因——它可能返回一个转换为intchar,或者int EOF(这是无效的char,所以如果你得到它,你可以确定你通过了文件的结尾)。

    【讨论】:

    • 这是 IMO 最有启发性的答案。
    【解决方案4】:

    EOF 未存储在文件中。当没有更多数据要读取或发生输入错误时,操作系统会返回 EOF(通常定义为 -1)。因此,一旦到达文件末尾,您必须点击 EOF。

    我对你书中的陈述的猜测是它的意思是"EOF is not necessarily be at the end of file but also possible to have it somewhere in the middle of a file". 这是预期的输入错误。

    【讨论】:

      【解决方案5】:

      在 C 代码的上下文中,EOF 只是表示没有更多数据可用于给定的输入流。这是否对应于文件本身中的特殊 EOF 字符是底层文件或 I/O 系统的功能。

      【讨论】:

        猜你喜欢
        • 2014-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-09
        • 2020-09-26
        • 2017-06-13
        • 1970-01-01
        • 2017-08-02
        相关资源
        最近更新 更多