C语言的二进制IO函数fread()和fwrite()
来源:互联网 发布:太阳辐射强度数据 编辑:程序博客网 时间:2024/04/18 19:25
C语言的二进制IO函数fread()和fwrite()
图片来源-百度图片
之前的fprintf()、fscanf()、fgets()和fputs()等标准I/O都是面向文本的,用于处理字符和字符串。
例如,下面的代码:
double num=1./3;fprintf(fp,"%f",num);
把num存储为8个字符;0.333333。使用%0.2f转换说明将其存储为4个字符:0.33,用%0.2f转换说明将其存储为14个字符:0.33333333333。改变转换说明将改变存储该值所需的空间数量,也会导致存储不同的值。把num存储为0.33后,读取文件就无法将其恢复为更高的精度。一般而言,fprintf()把数值转换为字符数据,这种转换可能会改变值。
为保证数值存储前后一致,最精确的做法是使用与计算机相同的位组合来存储。因此,double类型的值,应该存储在一个double大小的单元中。如果以程序所用的表示法把数据储存在文件中,则称为二进制形式储存数据。不存在从数值形式到字符串的转换过程。对于标准I/O,fread()和fwrite()函数用于二进制形式处理数据(如下图所示)。
实际上所有的数据都是以二进制形式储存的,甚至连字符都以字符码的二进制表示来储存。如果文件中的所有数据都被解释成字符码,则称为该文件包含文本数据。如果大部分或所有数据被解释成二进制形式的数值数据,则称该文件包含二进制数据(另外,用数据表示机器语言指令的文件都是二进制文件)。
二进制和文本的用法很容易混淆。ANSI C和许多操作系统都同时识别这两种文件格式,能以二进制数据或文本数据形式存储或读取信息。可以用二进制模式打开文本格式的文件,可以把文本储存在二进制形式的文件中。可以调用getc()拷贝包含二进制数据的文件。然而,一般而言,用二进制模式在二进制格式中存储二进制数据。类似地,最常用的还是以文本格式打开文本文件中的文本数据(通常文字处理器生产的文件都是二进制文件,因为这些文件中包含了大量的非文本信息,如字体和格式等)。
fread()和fwrite()函数的用法
头文件:#include <stdio.h>
fread()函数用于从文件流中读取数据,其原型为:
size_t fread(void *buffer, size_t size, size_t count, FILE * stream);
【参数】buffer为接收数据的地址,size为一个单元的大小,count为单元个数,stream为文件流。
fread()函数每次从stream中最多读取count个单元,每个单元大小为size个字节,将读取的数据放到buffer;文件流的位置指针后移 size * count 字节。
【返回值】返回实际读取的单元个数。如果小于count,则可能文件结束或读取出错;可以用ferror()检测是否读取出错,用feof()函数检测是否到达文件结尾。如果size或count为0,则返回0。
与fread()相对应的函数为fwrite(),fread() 和 fwrite() 一般用于二进制文件的输入输出,ASCII文件还是不要考虑了。
头文件:#include <stdio.h>
fwrite()函数以二进制方式向文件流中写入数据,其原型为:
size_t fwrite(void * buffer, size_t size, size_t count, FILE * stream);
【参数】buffer为数据源地址,size为每个单元的字节数,count为单元个数,stream为文件流指针。
fwrite()函数每次向stream中写入count个单元,每个单元大小为size个字节;文件流的位置指针后移 size * count 字节。
【返回值】返回成功写入的单元个数。如果小于count,则说明发生了错误,文件流错误标志位将被设置,随后可以通过ferror()函数判断。
如果 size 或 count 的值为 0,则返回值为 0,并且文件流的位置指针保持不变。
与fwrite()相对应的函数为fread(),fread() 和 fwrite() 一般用于二进制文件的输入输出。
参考文献:
[1] 史蒂芬・普拉达. C Primer Plus (第6版) 中文版[M]. 人民邮电出版社, 2016.
[2] C语言fread()函数:从文件流中读取数据.-来源
[3] C语言fwrite()函数:向文件流中写入数据-来源
- C语言的二进制IO函数fread()和fwrite()
- C语言fwrite()函数和fread()函数
- C标准IO的fread和fwrite
- C语言文件流操作的二进制读写和定位(fwrite、fread、fseek)
- C语言数据块读写函数:fread和fwrite
- C语言数据块读写函数:fread和fwrite
- C语言: fwrite和fread函数的用法小结 (网上摘抄,方便以后查询)
- Linux下用C语言fopen、fread和fwrite函数对二进制文件的操作
- 关于c语言中fread和fwrite的使用
- C语言中的fread和fwrite
- C 语言中fread()和fwrite()用法
- C语言中的二进制I/O:fread、fwrite
- fwrite 和 fread函数
- fread和fwrite函数
- fread函数和fwrite函数的用法
- 5.9 fread和fwrite函数-二进制I/O
- fwrite和fread函数的用法小结(怎么样以二进制形式保存和读取文件)
- fwrite和fread函数的用法小结(怎么样以二进制形式保存和读取文件)
- 图的存储方法
- UVa10276 HDU1329 ZOJ1239 Hanoi Tower Troubles Again!【递推函数+打表】
- mybatis入门使用4:返回对象方式
- deepin下安装docker-ce
- spark集群搭建过程
- C语言的二进制IO函数fread()和fwrite()
- PAT-A-1040. Longest Symmetric String (25)
- 常用工具汇总
- Plug-in org.eclipse.wst.jsdt.ui was unable to load class org.eclipse.wst.jsdt.internal.ui.javaeditor
- MAC phpstrom 快捷键
- SVG 的 PathData 在 Android 中的使用
- react-native 之redux install
- 51Nod--1013 3的幂的和
- 特征选择 (feature_selection)