【发布时间】: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”!