当前位置: 首页 > 工具软件 > FE > 使用案例 >

feof函数详解

羊舌高爽
2023-12-01

feof函数详解

网上很多feof讲解的很模糊,百看不如一试,经过笔者在编译器的亲自测试之后总结如下:

第一种情况:

如果没有使用fread读取文件而直接使用feof函数得到的返回值是0

第二种情况:

使用fread读取文件,假设使用fread(buf,1,1,filp) 一个字节一个字节的进行读取,如果没有读到文件的结尾,那么feof返回值都是0,直到读到文件结尾那么返回值就是1

例如:假设要读取的文件名字为txt,文件内容是 hi

程序是:

char buf[10];

FILE *filp = fopen(“./txt”,”rw”); //笔者在linux下测试,./txt表示本目录下的txt文件

 

printf(“%d\n”,feof(fip));  //打印 0  没有调用fread 必然打印0

 

fread(buf,1,1,filp);

printf(“%d\n”,feof(fip)); //打印 0  读取第一个字节h

 

fread(buf,1,1,filp);

printf(“%d\n”,feof(fip)); //打印 0  读取第二个字节i

 

fread(buf,1,1,filp);

printf(“%d\n”,feof(fip)); //打印 读取第三个字节---换行符!!

 

fread(buf,1,1,filp);

printf(“%d\n”,feof(fip));   //打印1  读取文件结束

 

 

所以需要注意的有两点一个是没有使用fread直接用feof会返回0,另一个就是换行符也算是要读取的一个字节,所以如果文件是空的,使用fread之后调用feof也会返回0,因为空文件也是先读取换行符! 然后再次fread之后使用feof就是1了。

 

第三种情况:

使用freadn个字节为单位进行读取,例如以4个字节为一组,fread(buf,4,1,filp),如果在4个字节中包含了文件结束符,那么返回的就是1

例如:

例如:假设要读取的文件名字为txt,文件内容是 kkk

那么程序这样:

char buf[10];

FILE *filp = fopen(“./txt”,”rw”); //笔者在linux下测试,./txt表示本目录下的txt文件

 

printf(“%d\n”,feof(fip));  //打印 0  没有调用fread 必然打印0

 

fread(buf,4,1,filp);

printf(“%d\n”,feof(fip));   //打印0  因为kkk加上换行符正好是4个字节

 

而如果txt的内容是 kk

fread(buf,1,1,filp);

printf(“%d\n”,feof(fip));   //打印1  因为4个字节是 kk+换行符+文件结束符 包含了文件结束符就会打印1

 

 

 

 类似资料: