| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3898 人关注过本帖
标题:fread函数返回值
只看楼主 加入收藏
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
结帖率:91.43%
收藏
已结贴  问题点数:10 回复次数:9 
fread函数返回值
函数原型

size_t fread ( void *buffer, size_t size, size_t count, FILE *stream)

如果实际读取的字节数n,size*(count-1)<n<size*count,那返回值是count还是count-1或者其他的?
搜索更多相关主题的帖子: count stream count stream 
2015-07-15 15:45
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:3 
实际读取的

一片落叶掉进了回忆的流年。
2015-07-15 17:33
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9008
专家分:53957
注 册:2011-1-18
收藏
得分:3 
n必为size的倍数
2015-07-15 20:55
实际应用
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:89
专家分:341
注 册:2015-5-30
收藏
得分:3 
返回值是count
2015-07-15 22:30
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
收藏
得分:0 
回复 3楼 rjsp
返回值不是这个
2015-07-16 09:05
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
收藏
得分:0 
回复 2楼 诸葛欧阳
可能没说明白,如果是fread(a,100,1,fp);
如果fp里不足100个字节,这个返回值是多少
2015-07-16 09:07
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
收藏
得分:0 
回复 4楼 实际应用
谢谢
2015-07-16 09:07
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9008
专家分:53957
注 册:2011-1-18
收藏
得分:0 
以下是引用lyl930130在2015-7-16 09:05:36的发言:

返回值不是这个
你自己没说清楚
将“如果实际读取的字节数n”改为“如果实际读取的字节数n”
2015-07-16 11:03
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:3 
看帮助有答案,看书也有答案。

授人以渔,不授人以鱼。
2015-07-16 11:59
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
首先看函数的原型:
size_t fread ( void *buffer, size_t size, size_t count, FILE *stream);
各参数的意义:
void* buffer: 这是指向存储被读入数据的指针,亦即所需要读的数据存储地址,形参是无类型的,使用时须把实参转型为实际的数据类型,否则会报警告。
size_t size:  这是函数一次读取的数据块大小,所谓次数,即后面的参数count规定读多少块。
size_t count: 这是读多少块数据的计数器,解释如上。
FILE* stream: 无需解释。
返回值:       size_t类型的,是计数器,是成功读取了多少块的意思。

举个实例,如下调用代码:
size_t readden = fread((char*)str, 100, 5, f);

这个调用,是令fread()函数做5次读取动作,每次读100个字节,即总共“期望”读取500个字节(100*5),但实际的数据流,可能没有500个字节,比如只有420个字节,那么只能成功读取4次100Bytes,最后一次是读不到100Bytes的,这样返回值就是4,表示成功读取了4次,而buffer中,则只有400Bytes。这是告诉你实际读了多少数据的。

fread()/fwrite()的读写,比fscanf()/fprintf()快,因为这是二进制读写,不用分析文本和转换数据。它的速度,体现在每次读取一大块数据上,那个size参数不宜太小,那种每次读取1个byte的动作,是低效的,此时应用fgetc()/fputc()而不是fread()/fwrite()。系统读写流数据,可能带缓冲机制(那未必是C库的缓冲,而是操作系统的缓冲,不是程序可以控制的),当设计的size尺寸与系统的缓冲块单元匹配时,读写速度最高,那个绝不是1Byte,通常不是4K就是16K。

[ 本帖最后由 TonyDeng 于 2015-7-16 14:35 编辑 ]

授人以渔,不授人以鱼。
2015-07-16 14:29
快速回复:fread函数返回值
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017467 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved