java实现fread_C中fread()函数的返回值

这个问题很容易搞错,并导致很多问题,需要强调的是fread函数返回的并不是字节数。

realRead = fread(buf,item,count,fp)    (每次读item大小的数据块,分count次来读。)

而是返回的是成功有效的读取的item元素的个数,而成功读入的字节数则是realRead * sizeof(item)

一般说来realRead 是小于count的,很巧的情况就刚好为count.除非文件大小刚好为item大小的整数倍。

返回的是真实读入item元素的个数,虽然读了count次,但是真正读到的有效个数为realRead个

真实读入字节数就为realRead*sizeof(item)

RETURN VALUE

fread  and  fwrite  return the number of items successfully read or written (i.e., not the number of

characters).  If an error occurs, or the end-of-file is reached, the return value is  a  short  item

count (or zero).

fread does not distinguish between end-of-file and error, and callers must use feof(3) and ferror(3)

to determine which occurred.

fread(从文件流读取数据)

表头文件  #include

定义函数  size_t fread(void * ptr,size_t size,size_t count,FILE * stream);

函数说明  fread()用来从文件流中读取数据。参数stream为已打开的文件指针,参数ptr 指向欲存放读取进来的数据空间,读取的字节数以参数size*count来决定。

Fread()会返回实际读取到的count数目,如果此值比参数count来得小,则代表可能读到了文件尾了或者有错误发生(前者几率大),这时必须用feof()或ferror()来决定发生什么情况。

返回值  返回实际读取到的count数目。

fread返回的不是字节数,

当且仅当下面这么用的时候,返回值才是字节数(当然因为恰好一个数据块大小为1个字节,相当于realRead*1)

char buff[size];

FILE *fp;

...

realRead = fread(buff, 1, size, fp);

...

如果是: fread(buff, size, 1, fp)

返回1表示读取了size字节,返回0表示读取数量不够size字节

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值