免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6331 | 回复: 14
打印 上一主题 下一主题

问个fread的未知问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-02 10:50 |只看该作者 |倒序浏览
本帖最后由 houtinghua 于 2010-07-02 11:21 编辑

fread一个打开的文件流,文件长度100;
int r = fread( buf,1,100,fp );
这个时候fread有没有可能返回70,我的意思是说fread的过程中没有发生普通意义上的错误,只是一次没读那么多,让你再fread一次,读取100-70=30个字节呢?

因为我看函数介绍说fread返回实际读取的,但是没有确切说明实际读取的字节必须等于100

不知道你们看明白我想说什么了吗


把下面的提上来  怕你们不往下看

以返回的长度为准。如果不足是要再读的。至于这种情况是否发生,和平台以及fread()实现情况有关。你不能假设 ...
没本 发表于 2010-07-02 10:59



    我就等你最后一句话呢  那么找你的意思,读文件应该着这么找写了?
  1. int len = 100;//文件实际长度,已知
  2. int r = 0;
  3. while ( len>0 )
  4. {
  5.     r = fread(buf,1,len,fp);
  6.     len-=r;
  7. }
  8. ...
复制代码

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2010-07-02 10:54 |只看该作者
有错或者到达文件尾才会返回小于要求读的数

论坛徽章:
0
3 [报告]
发表于 2010-07-02 10:56 |只看该作者
size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream);
fread()会返回实际读取到的nmemb数目,如果此值比参数nmemb 来得小,则代表可能读到了文件尾或有错误发生,这时必须用feof()或ferror()来决定发生什么情况。

论坛徽章:
0
4 [报告]
发表于 2010-07-02 10:56 |只看该作者
有错或者到达文件尾才会返回小于要求读的数
hellioncu 发表于 2010-07-02 10:54



    也就是说文件实际长度100,我fread  100,那么返回结果肯定是100?

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
5 [报告]
发表于 2010-07-02 10:58 |只看该作者
也就是说文件实际长度100,我fread  100,那么返回结果肯定是100?
houtinghua 发表于 2010-07-02 10:56



    没错的情况下{:3_188:}

论坛徽章:
0
6 [报告]
发表于 2010-07-02 10:59 |只看该作者
以返回的长度为准。如果不足是要再读的。至于这种情况是否发生,和平台以及fread()实现情况有关。你不能假设r只能是失败或者100。

论坛徽章:
0
7 [报告]
发表于 2010-07-02 11:06 |只看该作者
冗余检查是必需的

论坛徽章:
0
8 [报告]
发表于 2010-07-02 11:07 |只看该作者
以返回的长度为准。如果不足是要再读的。至于这种情况是否发生,和平台以及fread()实现情况有关。你不能假设 ...
没本 发表于 2010-07-02 10:59



    我就等你最后一句话呢  那么找你的意思,读文件应该着这么找写了?
  1. int len = 100;//文件实际长度,已知
  2. int r = 0;
  3. while ( len>0 )
  4. {
  5.     r = fread(buf,1,len,fp);
  6.     len-=r;
  7. }
  8. ...
复制代码

论坛徽章:
0
9 [报告]
发表于 2010-07-02 11:59 |只看该作者
是的,还有判断r返回0的情况,要不就死循环了。

论坛徽章:
0
10 [报告]
发表于 2010-07-02 12:51 |只看该作者
o~~~~~~~~~~~~~~~~~~~~~~~原来如此
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP