在C中,使用fopen打开文件有两种模式:一种是文本模式,一种是二进制模式。那这两种模式之间有什么区别,是不是使用文本模式打开的文件就只能使用文本函数比如fprintf来操作,而使用二进制打开的文件就只能使用二进制函数比如fwrite来操作呢?

答案是否定的。C里面之所以有文本模式和二进制模式,完全是出于跨平台的需要。

文本模式的意义

众所周知,在Windows下,CTR+Z这个字符用来表示一个文件的结尾,而Unix下使用CTR+D。此时,如果使用文本模式打开一个文件,当读到CTR+Z这个字符时,C就能识别出这是文件结尾的标志,在Unix系统下也是一样,当读到CTR+D,C也知道这事文件结尾,这样就能兼容Windows和Unix两个平台了。而如果使用二进制模式打开同样的文件,当在Windows下读到CTR+Z,或者是在Unix下读到CTR+D,都只会被当成一个纯粹的字符来看待。

同样的事情也发生在newline的表示上。在Unix下,newline使用\n表示,在Windows下,newline使用\r\n表示,而在Mac下,newline使用\r表示。这样,当一个文件使用文本模式打开时,如果是读取文件,C会依据平台将\r\n或者\r自动转换成\n,在写入文件时,C会将\n依据平台自动转换成\r\n或者\r,这样就完成了跨平台的操作。而如果使用二进制模式来操作文件,C不会自动做这样的转换,读到\r\n就是\r\n,写入\n也不会自动变成\r\n。

fprintf和fwrite的区别

fprintf和fwrite都是将内容写入到文件,无论文件是以文本模式打开,或者二进制模式打开,它们都不关心,总之写入到文件中的都是一段0和1的编码,只是写入的内容会不一样。比如对于整数12345,fprintf和fwrite写入时,文件内容如下图所示:

上图表示的区别很明显,fprintf写入时是将12345的每一位的字符编码写入文件,而fwrite是直接将12345在内存中的表示写入文件。

最新文章

  1. SQL,Linq,Lambda之间的转换练习
  2. 关于Entity Framework中的Attached报错的完美解决方案
  3. jquery 停止animate动画,并且回复最初状态
  4. 对于String对象,可以使用"="赋值,也可以使用"new"关键字赋值,两种方式有什么区别?
  5. iOS应用开发:什么是ARC
  6. 读书笔记-详解C程序开发中 .c和.h文件的区别
  7. 语音控制的tab选项卡
  8. [jQuery编程挑战]006 生成一个倒计时效果
  9. 我的第一个REST客户端程序!
  10. 为ASP.NET MVC应用程序读取相关数据
  11. 杜教筛 && bzoj3944 Sum
  12. spring之集合注入
  13. C# 程序员最常犯的 10 个错误(转)
  14. 5种做法实现table表格中的斜线表头效果
  15. gulp配置(编译压缩转码自动刷新注释全)
  16. C语言数据结构基础学习笔记——树
  17. 正则表达式、BeautifulSoup、Lxml进行性能对比
  18. MySQL5.7.11免安装版的安装和配置:解决MYSQL 服务无法启动问题
  19. extjs fileuploadfield default value
  20. JVM学习十一:JVM之深入分析ClassLoader

热门文章

  1. mac Axure RP 8 授权码 以及汉化
  2. Vue中异步组件(结合webpack,转载)
  3. SHOPEX快递物流单号查询插件
  4. 对QP中RTC的理解
  5. ioc解析
  6. 如何使用GeoServer发布地图
  7. 全国Uber优步司机奖励政策 (1月4日-1月10日)
  8. 成都Uber优步司机奖励政策(3月20日)
  9. LeetCode: 62. Unique Paths(Medium)
  10. Farpoint使用一点小总结