微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

fread在C中的关闭文件上不返回错误

如何解决fread在C中的关闭文件上不返回错误

据我了解,在使用fclose关闭文件后,fread不能读取该文件。但是,运行此代码

int main(int argc,char* argv[]){`

    File *fid;
    int test;
    char buf_read [5];
    
    fid = fopen("test.txt","rb");
    fclose(fid);
    test = fread(buf_read,1,5,fid);
    fprintf(stdout,"%d \n",test);
}

显示5,而据我了解fread的工作原理,它应该打印0,因为fread无法从关闭文件中读取。我在这里缺少fread或fclose的某些功能吗?

解决方法

来自fclose man page

对该流的任何进一步访问(包括对fclose()的另一个调用)都会导致未定义的行为。

您正在调用未定义的行为;任何事情都可能发生,包括您正在经历的看似正确的行为。

最好的办法是在调用fid之后立即将流(NULL)设置为fclose

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。