欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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了直接代码
feof() 巨坑有兴趣了解一下!!!
feof() 巨坑有兴趣了解一下!!!

feof() 巨坑有兴趣了解一下!!!
feof() 巨坑有兴趣了解一下!!!

这有区别吗? 对不起非常有区别!!! 是一个坑
feof() 巨坑有兴趣了解一下!!!
feof() 巨坑有兴趣了解一下!!!
feof() 巨坑有兴趣了解一下!!!
这是加上的

具体代码:
https://github.com/weifengcheng-jpg/minihttpv2.0

核心踩坑代码:
feof() 巨坑有兴趣了解一下!!!
直接跳出循环, 最后一行并没有发送出去!!!
导致浏览器并没有识别, 并显示出来!!!