C:feof的奇怪行为[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

我是C的新手。我偶然发现了feof的某些行为,我无法解释。具体在下面的代码中我创建一个文件,在其中写入一个字节的信息,然后关闭并再次打开它,读取信息(我的1个字节)直到达到EOF,然后通过0字节移动文件指针的当前位置(即根本不改变现在的位置)突然间我不再在EOF了。怎么会?

#include <stdio.h>
#include <stdint.h>
typedef uint8_t BYTE;

int main(void) {
    FILE* f = fopen("myfile.txt","w");
    BYTE b = 0x0000;
    fwrite(&b,1,1,f);
    fclose(f);
    f = fopen("myfile.txt","r");
    while (!feof(f)){
        fread(&b,1,1,f);
    }
    printf("We have reached EOF: %i \n",feof(f));
    fseek(f,0,SEEK_CUR);
    printf("We have reached EOF: %i \n",feof(f));
} 

产量

We have reached EOF: 1 
We have reached EOF: 0 
c fseek feof
1个回答
3
投票

来自fseek文档:

成功调用此函数后,将清除流的文件结束内部指示符,并删除此流上以前调用ungetc的所有效果。

© www.soinside.com 2019 - 2024. All rights reserved.