博客
关于我
文件结束符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/

    你可能感兴趣的文章
    可编辑列表(json文件,可编辑,添加等)
    查看>>
    学生信息管理系统之增(五):添加用户信息流程
    查看>>
    C++面向对象程序设计实践——任务与指导书(2)
    查看>>
    社区医疗app-Ui设计
    查看>>
    Python图像处理之PIL
    查看>>
    HTML 表单验证
    查看>>
    爬虫代理http协议的请求
    查看>>
    mysql时间为0000-00-00 00:00:00时,程序读取错误
    查看>>
    ubuntu System program problem detected
    查看>>
    使用ivx图表组件的经验总结
    查看>>
    17场演讲,500+嘉宾 |「观远2020智能决策峰会暨产品发布会」看点先知道
    查看>>
    专访汇付数据副总裁姜靖宇:“纸上谈兵”时代终结,人工智能将变革第三方支付行业
    查看>>
    张小龙的“败走麦城”
    查看>>
    小程序的生命周期
    查看>>
    Redis学习笔记—单个键管理
    查看>>
    多线程基础部分
    查看>>
    Java学习记录之ArrayList集合
    查看>>
    PHP之配置开发环境
    查看>>
    Shiro 的身份认证
    查看>>
    什么是信道编码?信道编码比较
    查看>>