博客
关于我
文件结束符EOF
阅读量:681 次
发布时间:2019-03-17

本文共 1274 字,大约阅读时间需要 4 分钟。

问题解答:关于文件结束符EOF

EOF 是 "End Of File" 的缩写,意为"文件结尾"。它并不是文件中的一个字符,而是在C语言的标准库中定义的一个宏,具体表示文件操作中达到文件末尾或发生读取错误的状态。

什么是EOF?

EOF 可以看作是一个操作状态,而不是文件中的实际字符。当try读取文件时,如果达到文件结尾,fgetc()getc() 函数会返回 -1,这就是EOF.

为什么EOF不是文件中的字符?

  • EOF 不是实际存在于文件中的字符,它只是一个状态,表示文件已经结束。
  • EOF 也不是由用户输入的终端符号(如 Ctrl+ZCtrl+D)触发的字符,而是一个错误状态。

getchar() 的两大特点

  • 按行为存取

    • getchar() 函数将输入按行为存取。如果没有特殊处理,程序通常会在遇到换行符 '\n' 或 EOF 时停止读取。
  • 返回值处理

    • getchar() 通常返回输入的字符,但在遇到 EOF 时返回 -1。
    • 为此,正确定义变量时应用 int 类型,而不是 char。例如:
      int c;c = getchar();

      而非:

      char c;c = getchar();
  • EOF 的两大状态

    1. 作为文件结束符

    • 在标准输入中,EOF 被称为 "文件结尾",表示已经读到文件的末尾。
    • 在 Windows 系统中,输入 Ctrl+Z 会产生 EOF;Linux 和 macOS 则使用 Ctrl+D

    2. 作为换行符结束符的处理

    • 当输入按键输入并按回车(换行符 '\n')后,输出会立即显示。
    • 如果输入 Ctrl+D,它不会马上终止输入,而是结束当前行的输入,并提示系统等待下一次输入。

    示例

    • 输入 abc 并按回车,输出 abc
    • 输入 abc 并按 Ctrl+D,输出 abc
    • 输入 Ctrl+D 后,下一轮输入才会结束。

    如何检测文件结束?

    • 使用 feof() 函数检测 EOF 状态。feof() 仅在读取操作失败时返回 TRUE,区分 EOF 和其它错误。
    • 使用 ferror() 函数获取错误信息。

    示例代码:

    #include 
    #include
    int main() { FILE *fp = fopen("test.txt", "r"); int c; while ((c = fgetc(fp)) != EOF) { if (c == '\n') { printf("新的一行!\n"); } printf("%c", c); } fclose(fp); return 0;}

    注意事项

    • EOF 可能表示读取错误(如文件权限问题),即使得到 -1,也应通过 feof() 检测是否已结尾。
    • C 编程中, EOF 通常定义为 -1,但具体数值可能根据实现而异。

    如需进一步了解 C 标准库函数及其内存管理方法,可以参考 《C专家编程》

    转载地址:http://slmhz.baihongyu.com/

    你可能感兴趣的文章
    FI 替代相关 OSS Note 要点记录
    查看>>
    蓝桥杯---试题 算法提高 欧拉函数(数学)
    查看>>
    【网络加速】TensorRT7-开发指南中文_Plus版【1】
    查看>>
    SaltStack about The Top File 使用知识介绍
    查看>>
    AttributeError: ‘list‘ object has no attribute ‘astype‘
    查看>>
    网络协议和支持(一)、uuid模块
    查看>>
    numpy.frombuffer()
    查看>>
    文件结束符EOF
    查看>>
    Latex 错误集合
    查看>>
    Python的一个报错——OSError: [Errno 22] Invalid argument
    查看>>
    Python的内置函数(四十一)、 index()
    查看>>
    OSError: [Errno 22] Invalid argument: ‘D:\test\x07‘
    查看>>
    Python字符串操作之字符串分割与组合
    查看>>
    tf.tuple
    查看>>
    windows系统配置自动tomcat
    查看>>
    49数据通路的功能和基本结构
    查看>>
    Java面试宝典(2020版)
    查看>>
    Springboot 初學習
    查看>>
    2020年云南省专升本 - 「计算机」专业各院校招生计划
    查看>>
    Android 四大组件、五大存储、六大布局总结
    查看>>