我正在读“Carter的PC汇编语言”,我在第32页的脚注中看到了这个短语,这使我很困惑!
如果我们假设文件末尾没有EOF(正如本书所说)是一个正确的语句,那么我们如何确定文件的结尾?
并且它还产生了另一个问题:fseek是否使用EOF在文件中来回移动?常见误解:文件末尾有一个EOF字符
回答
PC =>^Z:EOF
在奥尔德PC-天的CTRL-Z在对EOF一个文件中的信号。
UNIX和其他现代系统下:阅读stat.st_size落后之后,EOF发出信号
从http://www.drpaulcarter.com/cs/common-c-errors.php:
这是什么价值? EOF对学生常见的误解是 文件末尾有一个特殊的EOF字符。文件末尾不存在特殊的 字符。 EOF是由函数返回的整数错误代码 。
那只告诉我这些人不知道^ Z。 – 2012-03-28 12:43:16
非常有用的链接 – Rsh 2012-03-28 15:19:05
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".
这对预期的输入错误是正确的。
那么,EOF
不存储在文件的末尾,而不是char
。 EOF
是一条错误消息,读取函数在没有更多数据要读取时返回。这是getchar
回报int
的原因 - 它可能会返回一个char
转化为int
,或int
EOF
(这是无效的char
,因此,如果你得到它,你可以肯定,你通过文件的末尾)。
这是IMO最有启发性的答案。 – Wildcard 2016-11-23 05:36:41
在C代码的情况下,EOF
只是一个表示给定输入流没有更多数据可用的指示。是否与文件中的特殊EOF字符相对应,是底层文件或I/O系统的功能。
- 1. 需要解析一个字符串直到文件末尾
- 2. 从文件末尾清除2个换行符字符
- 3. 具有2个字符3位数字和末尾一个字符的掩码
- 4. 在单词的末尾放置一个字一个字符串
- 5. Emacs ediff错误“在文件末尾没有换行符”
- 6. ,linux下文件末尾没有空字符
- 7. 字符串将第一个单词移至字符串末尾
- 8. 限制名称末尾只有一个连字符用户名
- 9. 空字符串在末尾有“\ u0000”
- 10. 如何解决大量文件的“文件末尾没有换行符”警告?
- 11. 使用Java在文件的每一行末尾添加一个字符
- 12. 我不断收到一个错误“到达文件的末尾,而解析”
- 13. 替换字符串末尾的字符?
- 14. 将插入符号移动到文本输入字段的末尾并使末尾可见
- 15. CryptDecrypt在解码字符串的末尾返回随机字符?
- 16. Rails parse_url()文件末尾达到错误
- 17. 字符串在另一个字符串内的文本的末尾
- 18. 在文件末尾读取一个数字
- 19. 如何区分EOF字符和文件的实际结尾?
- 20. 在一个字符串的末尾解析多个单词 - 正则表达式
- 21. 复制Word中的末尾没有换行符的末尾
- 22. 从字符串末尾删除^符号
- 23. 文档末尾的事件
- 24. 在文件末尾写入
- 25. HTML文件末尾的CSS
- 26. 检查每个文件末尾的CRLF
- 27. 只有在字符串末尾不匹配字符组
- 28. 解析一个字符串(用空格)但忽略空格末尾的(精神)
- 29. 在末尾解析数字的类名?
- 30. MacVim在文件末尾显示奇怪的字符“^ @”
所有文件都有大小。如果你从第一个字节读到最后一个(如文件大小所示),你已经到达文件的末尾。没有特殊的_character_标记文件的结尾(考虑尝试读取二进制数据,文件结束字节与其他任何字节的区别如何?)。 – 2012-03-28 12:27:47
混淆可能是EOF本身只是“文件结束”的简称,因此它可能意味着很多东西:ASCII字符0x1A,打开的文件读取器已达到结尾的条件,函数eof ()'或它的结果,非字符常量'EOF'等。 – 2012-03-28 12:34:49
@JoachimPileborg只是为了好玩,你应该在中间创建一个带有\ x1A的文本文件,然后从命令行键入它。 – 2012-03-28 12:40:01