feof() 巨坑有兴趣了解一下!!!
程序员文章站
2024-03-14 12:28:40
...
一、feof()是什么?
feof()是检测流上的文件结束符的函数,如果文件结束,则返回非0值,否则返回0
一般在文件操作,中经常使用feof()判断文件是否结束。
二、feof()的经典错误
#include<stdio.h>
int main(void)
{
FILE *p;
p = fopen("open.txt", "r");
if (feof(p))
{
printf("文件为空。");
}
else
{
printf("文件不为空。");
}
return 0;
}
根据这个函数的定义,一般大家都是这样使用的,但是这样使用,文件中无论是否有内容,都会被判断为“文件不为空”。
feof() 我踩的坑
feof()的原理:
feof()函数,并不是通过读取到文件的EOF来评判,这个文件是否为空。
对feof()来说,它的工作原理是,站在光标所在位置,向后看看还有没有字符。如果有,返回0;如果没有,返回非0。它并不会读取相关信息,只是查看光标后是否还有内容。
直接使用时的错误分析:
对于一个空文件来说,当程序打开它的时候,它的光标会停在文件的开头,但是由于文件里什么内容都没有存(但是EOF是存在的),即整个文件就存贮了一个EOF。当程序打开文件,并直接调用feof()时,这个函数就会站在光标的位置向后张望,结果就看见了EOF,然后就当然返回0了。
不BB了直接代码
这有区别吗? 对不起非常有区别!!! 是一个坑
这是加上的
具体代码:
https://github.com/weifengcheng-jpg/minihttpv2.0
核心踩坑代码:
直接跳出循环, 最后一行并没有发送出去!!!
导致浏览器并没有识别, 并显示出来!!!
下一篇: JDBC操作和数据库交互的实现