• 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<stdio.h>
     
    定义函数  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字节

  • 相关阅读:
    自己动手用Javascript写一个无刷新分页控件
    自己动手写一个通用的分页存储过程(适用于多表查询)
    Towards Accurate Multiperson Pose Estimation in the Wild 论文阅读
    统计学习方法c++实现之一 感知机
    2018百度之星开发者大赛-paddlepaddle学习(二)将数据保存为recordio文件并读取
    2018百度之星开发者大赛-paddlepaddle学习
    [转载]C#_Path类常用操作
    安装SQL2K是的文件挂起错误
    相见恨晚MySQL 多表查询
    php截取字符串,出现乱码
  • 原文地址:https://www.cnblogs.com/to-creat/p/5643931.html
Copyright © 2020-2023  润新知