C 库函数 - fread()详解
头文件 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()详解相关推荐
- linux动态库注册函数,Linux动态库函数的详解
linux动态库函数的详解 加载动态库 void *dlopen(const char *filename, int flag); flag的可能值: rtld_lazy rtld_now rtld_ ...
- linux 动态库构造函数,Linux动态库函数的详解
Linux动态库函数的详解 加载动态库 void *dlopen(const char *filename, int flag); flag的可能值: RTLD_LAZY RTLD_NOW RTLD_ ...
- C语言库函数— qsort () 详解
目录 1. qsort()函数简介 1.1 函数原型 1.2 函数参数 2. 比较函数简介 2. 1 比较函数参数 2.2 比较函数使用 3. qsort()函数使用 3.1 整形数组排序 3.2 字 ...
- C51 基本函数、中断函数和库函数的详解
函数的定义和调用 此外,C51编译器本身还提供了丰富的库函数,用户可以根据需要随时调用,从而大大提高编程效率. 1. 函数的定义 函数定义的一般形式为: 函数类型 函数名(形参列表) { 局部变量定义 ...
- C语言标准库函数 qsort 详解
文章作者:姜南(Slyar) 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作. qsort包含在<stdlib.h>头文件中,此函数根据你给的比较条件 ...
- SHARC库函数cfft_mag详解
做了一个测试,主要是测试cfft_mag怎么计算的 for(i = 0; i < F_WLEN; i++){outFFTData[i].re = 1.3;outFFTData[i].im = 2 ...
- c语言库里的排序函数,C语言标准库函数qsort详解
1 函数简介 功 能: 使用快速排序例程进行排序 头文件:stdlib.h 用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(con ...
- 【RS码2】RS码的BM迭代译码原理详解及MATLAB实现(不使用MATLAB库函数-代码见CSDN同名资源)
关注公号[逆向通信猿]更精彩!!! 理论基础 订阅<信道编码>专栏,首先查阅各子程序的详解 [有限域生成]本原多项式生成有限域的原理及MATLAB实现 [有限域除法]二元多项式除法电路原理 ...
- 【BCH码2】BCH码的快速BM迭代译码原理详解及MATLAB实现(不使用MATLAB库函数-代码见CSDN同名资源)
关注公号[逆向通信猿]更精彩!!! 理论基础 订阅<信道编码>专栏,首先查阅各子程序的详解 [有限域生成]本原多项式生成有限域的原理及MATLAB实现 [有限域除法]二元多项式除法电路原理 ...
最新文章
- 移动网站性能优化(未完。。。)
- php企业网站源码安装教程,PHPSCUP企业建站系统v1.4 安装图文教程
- 什么是操作系统 PV 操作
- 元类及创建元类的方法(面试用
- HTTP 和 HTTPS 两种传输协议各自含义是什么?二者使用有什么区别?
- mysql 子字符串_Mysql 截取字符串取子集的函数应用
- 机器学习的数学基础——线性代数篇(一)
- 推荐一个好用的 sqlite 管理器 sqliteman 感觉比 navicat 好用
- 华为性格测评注意事项
- View和ViewGroup的概念
- Adjoin the Networks Gym - 100781A
- 使用gcov和lcov测试代码覆盖率
- 《形式感+——网页视觉设计创意拓展与快速表现》
- 门禁卡怎么弄到手机上,手机变成门禁卡,手把手超详细(建议收藏)
- iwatch可以用计算机吗,千万不要买AppleWatch的5个原因!
- 从一个html页面传值到另一个页面,两个html之间的值传递(js location.search用法)
- 我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。 百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
- Ubuntu 搜狗输入法 中文 无法切换 英文
- 在不同操作系统上安装Python的详细教程
- 华为云区块链BCS笔记
热门文章
- 妙飞:拥有空杯心态终身学习才能走得更远
- 信息技术与计算机网络国际会议,第七届信息技术国际会议(ICIT 2019)顺利召开...
- 2022沈阳早幼教展览会|沈阳学前教育展会|沈阳幼教产业展会
- python float 精度 处理
- mysql学习思路总结
- 南邮 OJ 2068 爱魔法的露露
- 安鸾渗透实战平台—— wordpress后台破解 (400分)
- Ubuntu16.04.06 LTS -bash 进程占用cpu很高,中了挖矿病毒
- 硬盘、ROM、RAM
- 使用Nginx搭建Http文件服务器