头文件 stdio.h

描述

C 库函数 size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream) 从给定流 stream 读取数据到 ptr 所指向的数组中。

声明

下面是 fread() 函数的声明。

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)

参数

  • ptr – 这是指向带有最小尺寸 size*nmemb 字节的内存块的指针。
  • size – 这是要读取的每个元素的大小,以字节为单位。
  • nmemb – 这是元素的个数,每个元素的大小为 size 字节。
  • stream – 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输入流。

返回值

  • 成功读取的元素总数会以 size_t nmemb对象返回,size_t 对象是一个整型数据类型。如果总数与 nmemb 参数不同,则可能发生了一个错误或者到达了文件末尾。

说明:

int nRead = fread(buf, sizeof(char), size, f);
int nRead = fread(buf, sizeof(char)*size, 1, f);

这两种写法都可以。

实例

下面的实例演示了 fread() 函数的用法。

实例

#include <stdio.h>
#include <string.h>int main()
{FILE *fp;char c[] = "This is runoob";char buffer[20];/* 打开文件用于读写 */fp = fopen("file.txt", "w+");/* 写入数据到文件 */fwrite(c, strlen(c) + 1, 1, fp);/* 查找文件的开头 */fseek(fp, 0, SEEK_SET);/* 读取并显示数据 */fread(buffer, strlen(c)+1, 1, fp);printf("%s\n", buffer);fclose(fp);return(0);
}

让我们编译并运行上面的程序,这将创建一个文件 file.txt,然后写入内容 This is runoob。接下来我们使用 fseek() 函数来重置写指针到文件的开头,文件内容如下所示:

This is runoob

另一个例子

将一张图片用二进制格式读取出来,然后传输,并存储在一个新文件

/*********************************************************************
概要:图片读取与存储测试
参考:https://ask.csdn.net/questions/206408https://blog.csdn.net/yhl_leo/article/details/50782792
目的:将一张图片用二进制格式读取出来,然后传输,并存储在一个新文件
日期:2019.9.26
作者:maohuifei
**********************************************************************/#include<stdio.h>
#include<string.h>/*********************************************************************
* 摘    要:将缓冲区数据写入文件
* 参 数:buf:filename:size:长度
* 当前版本:1.0.0
* 作    者:maoge
* 日    期:2019.09.07
* 备    注:
**********************************************************************/
void WriteFromStream(char * buf, char * filename, unsigned int  size)
{FILE * f = fopen(filename, "wb+");if (f){fwrite(buf, 1, size, f);fclose(f);}
}/*********************************************************************
* 摘    要:读取文件到缓冲区
* 参 数:buf:filename:size:
* 当前版本:1.0.0
* 作    者:maoge
* 日    期:2019.09.07
* 备    注:
**********************************************************************/
void ReadToStream(char * filename)
{char new_file[30] = "";//文件名FILE * f = fopen(filename, "rb");if (f){//下面fseek(f, 0, SEEK_END);int size = ftell(f);//返回给定流stream的当前文件位置。一般作用是获取文件大小,以定义buf大小char * buf = new char[size];fseek(f, 0, SEEK_SET);memset(buf, 0, size);//赋初值0int nRead = fread(buf, sizeof(char), size, f);printf("size=%d\n ", size);printf("nRead=%d\n ",nRead);//int nRead = fread(buf, 1, size, f);//sizeof(char)值就是1fclose(f);if (nRead > 0){//将二进制流打印成16进制字符串for (unsigned int i = 0; i < nRead; i++){printf("%02X ", (unsigned char)buf[i]);if (i % 16 == 15){printf("\n");}}}sprintf(new_file, "new3_%s", filename);WriteFromStream(buf, new_file, size);delete buf;}
}int main()
{ReadToStream("03.jpg");return 0;}

C 库函数 - fread()详解相关推荐

  1. linux动态库注册函数,Linux动态库函数的详解

    linux动态库函数的详解 加载动态库 void *dlopen(const char *filename, int flag); flag的可能值: rtld_lazy rtld_now rtld_ ...

  2. linux 动态库构造函数,Linux动态库函数的详解

    Linux动态库函数的详解 加载动态库 void *dlopen(const char *filename, int flag); flag的可能值: RTLD_LAZY RTLD_NOW RTLD_ ...

  3. C语言库函数— qsort () 详解

    目录 1. qsort()函数简介 1.1 函数原型 1.2 函数参数 2. 比较函数简介 2. 1 比较函数参数 2.2 比较函数使用 3. qsort()函数使用 3.1 整形数组排序 3.2 字 ...

  4. C51 基本函数、中断函数和库函数的详解

    函数的定义和调用 此外,C51编译器本身还提供了丰富的库函数,用户可以根据需要随时调用,从而大大提高编程效率. 1. 函数的定义 函数定义的一般形式为: 函数类型 函数名(形参列表) { 局部变量定义 ...

  5. C语言标准库函数 qsort 详解

    文章作者:姜南(Slyar) 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作. qsort包含在<stdlib.h>头文件中,此函数根据你给的比较条件 ...

  6. SHARC库函数cfft_mag详解

    做了一个测试,主要是测试cfft_mag怎么计算的 for(i = 0; i < F_WLEN; i++){outFFTData[i].re = 1.3;outFFTData[i].im = 2 ...

  7. c语言库里的排序函数,C语言标准库函数qsort详解

    1 函数简介 功 能: 使用快速排序例程进行排序 头文件:stdlib.h 用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(con ...

  8. 【RS码2】RS码的BM迭代译码原理详解及MATLAB实现(不使用MATLAB库函数-代码见CSDN同名资源)

    关注公号[逆向通信猿]更精彩!!! 理论基础 订阅<信道编码>专栏,首先查阅各子程序的详解 [有限域生成]本原多项式生成有限域的原理及MATLAB实现 [有限域除法]二元多项式除法电路原理 ...

  9. 【BCH码2】BCH码的快速BM迭代译码原理详解及MATLAB实现(不使用MATLAB库函数-代码见CSDN同名资源)

    关注公号[逆向通信猿]更精彩!!! 理论基础 订阅<信道编码>专栏,首先查阅各子程序的详解 [有限域生成]本原多项式生成有限域的原理及MATLAB实现 [有限域除法]二元多项式除法电路原理 ...

最新文章

  1. 移动网站性能优化(未完。。。)
  2. php企业网站源码安装教程,PHPSCUP企业建站系统v1.4 安装图文教程
  3. 什么是操作系统 PV 操作
  4. 元类及创建元类的方法(面试用
  5. HTTP 和 HTTPS 两种传输协议各自含义是什么?二者使用有什么区别?
  6. mysql 子字符串_Mysql 截取字符串取子集的函数应用
  7. 机器学习的数学基础——线性代数篇(一)
  8. 推荐一个好用的 sqlite 管理器 sqliteman 感觉比 navicat 好用
  9. 华为性格测评注意事项
  10. View和ViewGroup的概念
  11. Adjoin the Networks Gym - 100781A
  12. 使用gcov和lcov测试代码覆盖率
  13. 《形式感+——网页视觉设计创意拓展与快速表现》
  14. 门禁卡怎么弄到手机上,手机变成门禁卡,手把手超详细(建议收藏)
  15. iwatch可以用计算机吗,千万不要买AppleWatch的5个原因!
  16. 从一个html页面传值到另一个页面,两个html之间的值传递(js location.search用法)
  17. 我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。 百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
  18. Ubuntu 搜狗输入法 中文 无法切换 英文
  19. 在不同操作系统上安装Python的详细教程
  20. 华为云区块链BCS笔记

热门文章

  1. 妙飞:拥有空杯心态终身学习才能走得更远
  2. 信息技术与计算机网络国际会议,第七届信息技术国际会议(ICIT 2019)顺利召开...
  3. 2022沈阳早幼教展览会|沈阳学前教育展会|沈阳幼教产业展会
  4. python float 精度 处理
  5. mysql学习思路总结
  6. 南邮 OJ 2068 爱魔法的露露
  7. 安鸾渗透实战平台—— wordpress后台破解 (400分)
  8. Ubuntu16.04.06 LTS -bash 进程占用cpu很高,中了挖矿病毒
  9. 硬盘、ROM、RAM
  10. 使用Nginx搭建Http文件服务器