fread和fwrite有失败吗?怎么处理这个?

Mic*_*ine 12 c file stream

当我使用fread(C语言)从文件中读取时,fread的返回值有时会为0.

如手册所示:

fread()和fwrite()返回成功读取或写入的项目数

我必须写这样的代码吗?

int bytes_read;
while((bytes_read = fread(buffer, sizeof(int), 1, fp)) == 0) {

}
Run Code Online (Sandbox Code Playgroud)

我们总是要检查fread或fwrite是否成功?

R..*_*R.. 15

不,如果fread或者fwrite返回的数量少于读取或写入的预期记录数,则执行此类重试循环是没有意义的.也就是说,stdio不像低级别readwrite操作可能导致"短"读或写.

如果fread返回的数量少于请求的记录数,则表明您已经达到了EOF或严重的读取错误.您可以通过检查feof()和区分它们ferror().

同样,如果fwrite返回的次数少于请求的记录数,则表示磁盘空间不足或出现严重的写入错误.

在任何情况下,由于缓冲stdio使得基本上不可能知道成功写入了多少,因此如果遇到写入错误,通常需要考虑文件丢失并中止整个操作.