C语言如何判断⽂件的结束?

一、问题

在⽂件中查找匹配的信息时,需要遍历⽂件中的数据信息。在遍历的过程中,如何判断⽂件的指针已经到了⽂件的结尾呢?

二、解答

1. 问题解析

在对⽂件的操作函数中,除了存在读写⽂件的函数,还有⽤于测试⽂件流是否在结尾的函数,那就是 feof0函数。

该函数的⼀般形式为:

cpp 复制代码
int feof( FILE *stream );

其中 stream 是⽂件类型的指针。若函数的指针是指向结尾的,那么该函数返回值为0, 否则返回值为1。该函数既可以⽤于检测⼆进制⽂件,又可以⽤来检测⽂本⽂件。

2. 实践应⽤

使⽤ feof( ) 函数测试⽂件流是否在结尾,若不在结尾,进⼊循环,读取⽂件中的内容, 并累加⽂件中的字符个数。输出此个数。相应代码如下。

cpp 复制代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int count, num = 0;
    char buffer[128];
    FILE *stream;
    stream = fopen("text.txt", "r");
    while (!feof(stream))
    {
        count = fread(buffer, sizeof(char), 128, stream);
        num += count;
    }
    printf("读取的字符个数为:%d\n", num);
    fclose(stream);
}

在此例中,打开的是 text.txt ⽂本⽂件,这个⽂本⽂件中存放的内容如下所示。

程序的运⾏结果如下所示。

cpp 复制代码
读取的字符个数为 12

3.问题讨论

已知系统规定的⽂件结束符为 EOF,那么这个判断⽂件结束的符号与 feof( ) 函数测试⽂件结束有什么区别呢?

EOF 是 stdio.h 头⽂件中的宏定义,它的表示形式为:

cpp 复制代码
#define EOF -1;

因为字符的 ASCII 码值⼀般不可能出现 -1 ,所以当读取的字符为 -1 时,表示⽂件结束。 因此⽤ EOF 判断⽂本⽂件⽐较合适,然⽽对于⼆进制⽂件,使⽤这个 EOF 似乎就不太合适了,因为在⼆进制⽂件中是可以含有 -1 的,因此系统提供了这个 feof( ) 函数⽤于测试⼆进制⽂件的结束。

三、总结

检测⽂件流是否指向结尾具有很重要的应⽤,例如,上述例⼦中的计算⽂件中的数据信息有多少个字符。要了解这个 feof( ) 函数不仅可以测试⼆进制⽂件是否到结尾,也可以测试⽂本⽂件是否到结尾。

相关推荐
jimy14 分钟前
C++ 中 xvalue 的 identity 存在哪里?和 lvalue 的 identity 有什么区别?
开发语言·c++·1024程序员节
yujunl11 分钟前
U9 无授权的模式WebAPI开发的总结
开发语言·1024程序员节
zzu123zsw15 分钟前
为什么 Python 做 Agent 总在并发中崩溃?拆解 Blockcell 在 Rust 下的 Host-Cell 隔离与自愈状态机
开发语言·python·rust·大模型·ai agent
xiaoye-duck44 分钟前
《C++ 项目:手写大模型接入 SDK》Provider分析与实现
开发语言·c++·语言模型
qq_408606861 小时前
C_Primer_Plus_chapter17_exercise3
c语言·1024程序员节
denlaku1 小时前
JDK 22 新特性详解
java·开发语言
“AI国潮设计-小江”2 小时前
AIGC实战:Python+SDXL批量生成英歌舞IP立牌,解锁猪猪蛋糕“反差萌”流量密码(附完整API源码)
开发语言·人工智能·python·prompt·aigc
H.莓飛2 小时前
【数据结构】排序_OJ题(二):划分与选择
linux·服务器·c语言·开发语言·数据结构·visual studio
CRMEB系统商城2 小时前
服装连锁的导购分销与企微私域
java·大数据·开发语言·人工智能·小程序·php·1024程序员节
凉茶钱2 小时前
stack、queue、priority_queue、容器适配器完整梳理
开发语言·c++·queue·1024程序员节·stack