fwrite()与fprintf()的大不同

1.用法

 fwrite(void *buffer, sizeof(数据类型), 数据类型的数量, FILE *file);fprintf(FILE *file, 格式符, data);

2.fwrite()函数的详解

重中之重:fwrite()写的是内存印象图

fwrite()函数在进行数据写入文件的时候,其本质是在写内存印象图,将数据写入内存中的缓存,之后再经过操作系统将进行数据与文件之间的操作,此时数据存储在文件的形式(文件的主体)其实就是逻辑层面的内存印象图,数据在文件中存储的首地址也是相对首地址(而非物理地址)。

那么是写内存印象图,就有一定的规则,比如内存对齐模式,以及数字写入时遵循高高低低的原则,那么对于内存对其模式,简单来说就是,一个数据写入内存中的缓存,要遵循内存对其模式,如果说写入一个int类型的数据,那么这个数据的物理首地址一定是4的倍数,写入一个double类型的数据,那么这个数据在内存中的物理量首地址一定是8的倍数,经过操作系统对内存中的数据进行处理,这个数据在文件中存储(即二进制层面)呈现的逻辑地址(就是在文件中存储的首地址,也称相对首地址)一定是这个数据的类型的字节倍数,虽然会浪费一定的空间,但是就内存的页式管理方面,减少了在读取数据的时候,对内存的访问次数。但是这里说到文件属于外存的范畴,所以当我们采用fwrite()函数进行将数据写入文件的时候大可在代码的开头加上pragram pack(1),这个意思就是不再采用内存对其模式进行写入数据,在内存中的物理地址是接连存储的,不再像之前为了对齐而有空间的浪费,那么这些数据所存储在文件中的相对首地址接着前一个数据之后进行存储,极大的减少了空间的浪费,fwrite()对数据的处理和fprintf()函数的不同之处是,不管多大的数字只要在21亿范围之内,都将只占用四个字节,意思就是将这个数据转化为二进制,再根据内存的存储规则高高低低原则进行将数据存储到文件。

3.fprintf()函数的详解

重中之重:fprintf()写的是ASCII

fprintf()函数在进行数据写入文件的时候,其本质将数据的ASCII写进文件,不管是对于字符串还是数字来说,例如34568,采用fprintf()函数进行写入文件时,就会将这个数据的ASCII值写入文件,这个数据有多少位,就会占用多少个字节,34568写入内存的样子就是33 34 35 36 38(这里的33是3的ASCII值)

4.fwrite 与 fprintf的区别

1.在对字符与字符串处理上没有区别,
2.在对数字上,区别在于fwrite()将数据的二进制形式写入文件,而fprintf()是将ASCII值写入文件
3.在内存角度来看,fwrite()在不使用pragram pack(1)时候,写入文件是按照内存对其模式来进行存储的,为了进行对齐,会有空间的浪费,若使用pragram pack(1)则不会有空间的浪费,而fprintf()是紧跟上一个数据其后进行存储,没有空间的浪费。

5.将数据写入文件到底用哪个函数更好

必选fwrite(),因为好处太多

1.采用fwrite()进行写入数据,此时就要在代码的最开头加上pragram pack(1),保证不浪费空间,还能保证在读取的时候根据在文件中所占用的字节数进行定位读取,如果要进行读取文件内的信息,则可以直接用fseek()函数进行定位读取,而不用从头至尾挨个读取。
2.相较于fprintf()来还有一个好处就是,因为fprintf()进行写的时候,对应的应该采用fscanf()函数取相关的信息,但是fscanf()是采用格式符的形式进行读取,那就要求我们在写入的时候还要在每个数据之后再写一个空白字符进行将数据独立,这样fscanf()在读取的时候遇到空白字符就结束读取才能正确读取相关的信息,那么在写的时候就得使用大量的空间去写空白字符,这是我们所不想要的,自然用fwrite()函数就很方便,因为采用fread()函数进行读取,是根据字节数来进行读取,准确又方便也不用担心会遇到空白字符而结束读取,fread()函数直到读到文件的末尾才结束读取。
3.采用fwrite()函数时,会有很多辅助函数帮助你获取你想要的信息,例如ftell()函数可以得到当前位指针位置相对于文件首部的偏移量,fseek()可通过文件指针的定位读取相关的信息。

温馨提示:

采用fwrite()函数进行写的时候,最佳之选采用fread()函数进行读取;
采用fprintf()函数进行写的时候,最佳之选采用fscnaf()函数读取;
因为上边已经说了fwrite 与 fpritnf 在写入时候的区别,如果混用,会出现读出的数据与写入的数据有所出入。

关于将数据写入文件的两个函数fwrite()与fprintf()的大不同 —————— 开开开山怪相关推荐

  1. matlab搭配循环的函数按列将生成的数据写入文件

    备注:这两种方法均是我在使用循环的时候想将得到的数据写入文件 方法一(Excel格式)特点:速度慢 range = strcat('B',num2str(num));%B为单元格序号,得到'B1' f ...

  2. python中print又可将数据写入文件_Python第五课-将写入文件的列表格式化

    1.上节课代码中的问题 第四课中介绍了python持久化的基础实例--将数据写入文本文件. 可当我们试着把保存数据的文件读取出来会怎样呢? try: with open('man.txt', 'r') ...

  3. 获取文本上字符出现的次数,把数据写入文件

    /*** @author 影子* @create 2021-12-19-11:49** * 练习3:获取文本上字符出现的次数,把数据写入文件* ** * 思路:* * 1.遍历文本每一个字符* * 2 ...

  4. python将列表写入文件_Python将列表数据写入文件(txt, csv,excel)

    写入txt文件 def text_save(filename, data):#filename为写入CSV文件的路径,data为要写入数据列表. file = open(filename,'a') f ...

  5. python列表数据写入txt文件_Python将列表数据写入文件(txt, csv,excel)

    写入txt文件 def text_save(filename, data):#filename为写入CSV文件的路径,data为要写入数据列表. file = open(filename,'a') f ...

  6. C# 以MP3的格式将录制的音频数据写入文件流

    using NAudio.Lame; using NAudio.Wave; using System; using System.IO;public class Sound_Record{public ...

  7. 字典(JSON)数据写入文件并换行,Python

    字典(JSON)数据写入文件并换行,Python import jsonif __name__ == '__main__':dict_data = {"one": 1, " ...

  8. Matlab将数据写入文件

    Matlab将数据写入文件 1.清理现有工作区2.准备写入数据3.获取目标文件写入操作权限4.将数据写入目标文件5.将文件操作入口关闭6.将写入的文件内容展示在控制台 %清理工作区clear;clc; ...

  9. python作业:有一个学生成绩表,包括学号、姓名、高数、英语,计算机。 录入若干个学生学号、姓名、高数、英语,计算机5项数据。 将学生成绩表数据写入文件,文件名为“学生成绩表.txt

    1.有一个学生成绩表,包括学号.姓名.高数.英语,计算机. 录入若干个学生学号.姓名.高数.英语,计算机5项数据. 将学生成绩表数据写入文件,文件名为"学生成绩表.txt import cs ...

  10. 【Java-IO】File、搜索删除剪切、字符集、字符编码、字节流、将内存中的数据写入文件、字符流、缓冲流、Scanner、格式化输出、数据流、对象流、序列化与反序列化、Files工具类

    IO 文章目录 IO 简介 File 分隔符.大小写 常用方法 练习:搜索.删除.剪切 字符集(Character Set) 字符编码(Character Encoding) 字符编码比较 乱码 字节 ...

最新文章

  1. OpenStack Heat 如何来实现和支持编排
  2. cisco网络故障处理手册
  3. Oracle 原理: 过程和函数
  4. Uva536 Tree Recovery二叉树重建(先序和中序确定二叉树,后序输出)
  5. ANDROID PAD版本号 PHONE版本号 源代码有什么 差别?
  6. bzoj 3676: [Apio2014]回文串
  7. A very hard mathematic problem HDU - 4282
  8. Maven安装教程详解
  9. python读取文件夹中的所有图片并将图片名逐行写入txt中
  10. 三色球问题python_零基础入门学习Python习题3【输密码+水仙花数+摸三色球】
  11. 微积分精简版复习提纲
  12. Windows10开机音乐替换
  13. 德语语法笔记——动词的变位
  14. 布法罗大学计算机硕士学费,纽约布法罗大学学费是多少
  15. Source not fount
  16. 单片机读取多路温度c语言,以51单片机为内核实现了两路温度采集与显示的温度控制器设计...
  17. 5 Ways To Boost Typing Speed And Accuracy
  18. android QVGA WQVGA HVGA VGA WVGA各个分辨率的区别
  19. u盘被占用不能安全弹出怎么办?里面的文件怎么取出来
  20. 180个非常有用的电脑知识[转贴]

热门文章

  1. Renderdoc调试总结
  2. 线性代数笔记29——正定矩阵和最小值
  3. TCP客户端和服务端的互通信息
  4. MTK_核心功能模块内部结构框图
  5. excel表格打印每页都有表头_怎样设置Word表格打印时每页都显示表头?不会的看看这篇教程!...
  6. 卷积神经网络 c语言代码,【CNN】卷积神经网络(示例代码)
  7. dpi和ppi换算_十分钟快速理解DPI和PPI,不再傻傻分不清!
  8. 小码哥CRM项目(二)p20~p35
  9. 一步步学习k8s(二)
  10. 脉冲计数器校准配置方案