在项目程序中,用fgets()读一个文本文件,一行一行的读取,之前测试的所有的文件都没有问题,今天突然拿到一个文件测试时却出问题了,调试发现它并没有一行一行的读,但是用notepad++明明可以看到文件是一行一行的啊,又不是没有回车,纠结一会,发现这个错误的文件是mac格式的,关于unix/mac/dos-windows三种文本文件的格式的行尾区别,以下是搜索到的资料:

<strong>不同系统间的行尾表示</strong>  
UNIX格式,每行的行尾都是用一个0x0a字符(换行字符LF)表示的,  
而在WINDOWS/DOS下每行的行尾都是用0x0d 0x0a两个字符(回车字符CR,换行字符LF)表示的,  
MAC机,每行的行尾都是0x0d字符表示,即回车字符CR。  
<span style="color:#3333FF;">(经我用winhex查看,确实如此——yockie注)</span>  
在很多计算机语言中, <CR>表示为字符或字符串是\r, 而<LF>表示为字符或字符中是\n.  
而在printf这样的函数中, 如果你出现一个\n, 它却代表了一个逻辑上的意义, 即它代表在本地系统上的那种回车换行, 所以它在UNIX上只是<LF>, 但如果你在DOS上用诸如Truboc编程的话它输出的是<CR><LF>  
<strong>所以不同系统之间传输交换文件的时候,会出现问题;</strong>  
1)Unix或linux上有个小工具, 专门在两种文件格式之间进行转换, 叫unix2dos, dos2unix.或在  
vim中, 如果你想把一个文件存为另一种文件格式, 只需:set fileformat=unix或等号后面是dos, mac即可, 接下来的存盘动作就会自动把你的文件存为指定平台的格式.  
2)在UltraEdit的 File->Conversions(有些版本是在Format -> Convert to..)菜单中, 有三个子菜单项就是专供你在各种文本格式之间转换的.  
必须先将UNIX文本格式转换为DOS格式的。UltraEdit的FILE菜单中提供了对单个文件进行这种转换的能力,也可以实现批量转换。在UE中选择Search | Search in files菜单,在Find框中填写^n(表示UNIX文件中的回车换行符号),在Replace with中输入^p(表示DOS文件中的回车换行符号),全部替换后,就可以实现批量替换了。  
<strong>不同系统间ftp使用注意事项</strong>  
一些ftp的客户端程序会自动进行各个平台的文本文件格式转换. 所以要注意你在ftp中用ls看看到的文件大小未必是你下载下来的文件大小. 上传过程也是一样.  
如果你不想ftp这样自作主张只要用bin命令即可. 它会告诉ftp进行逐字节的二进制模式传输.  
[以上内容转自:http://hi.baidu.com/dongfangronger/blog/item/a46e56f0fd2129e27709d70f.html]

这就找到原因了,应该是fgets()函数是以读到'\n'为行结束标识(因为windows格式和unix格式的文本文件都能一行一行的读取),所以对于'\r'它并不识别为行结束标识。我是通过将mac格式文件转换为windows格式或unix格式来解决这个问题的。
当然还有其他的一些方法,例如在http://stackoverflow.com/questions/2061334/fgets-linux-vs-mac这里提到了用getdelim()或getline()函数来解决这个问题,因为在这两个函数中用个参数表示终结符,也就是说自己说明什么字符是终结符。不过我没有尝试。我想如果要做到通用的话,还得判断文本文件是什么格式的文件,也好知道传入哪一个终结符的参数。

unix/mac/dos-windows三种文本文件的格式的行尾区别相关推荐

  1. FAT32 or exFAT or NTFS,三种U盘格式的联系与区别

    U盘格式包括三种:FAT32.exFAT 和 NTFS,那么这三个格式具体有什么区别呢? (1) FAT32(File Allocation Table 32bit) 32位文件分配表,FAT32文件 ...

  2. 【转载】取得系统中网卡MAC地址的三种方法

    From:http://blog.csdn.net/zhangting1987/article/details/2732135 网卡地址这个概念有点混淆不清.因为实际上有两个地址,mac地址和物理地址 ...

  3. Windows三种文件系统:NTFS、FAT32、FAT16的区别

    转自:Windows三种文件系统:NTFS.FAT32.FAT16的区别 什么是文件系统? 文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构:即在磁盘上组织文件的方法.也指用于存储文件的磁 ...

  4. (POST请求中的三种数据请求格式.application/x-www-form-urlencoded和multipart/form-data和application/json)

    (POST请求中的三种数据请求格式.application/x-www-form-urlencoded和multipart/form-data和application/json) applicatio ...

  5. 企业管理Mac电脑的三种方式

    2015-08-07 来源:techtarget 虽然Mac电脑很少见,但也成功走入IT企业.IT必须找出与现有Windows Active Directory域整合的解决方案,并且确定所需的工具或系 ...

  6. win7修改mac地址的三种方法

    Win7修改MAC地址方法有以下三种: 方法一:使用Win7MAC地址修改工具 1,只适用于windows7系统的网卡MAC地址修改.XP的可以用,但没做什么测试. 2,部分windows7下的无线网 ...

  7. linux日志切割命令,Linux 服务器log日志切割三种方法【附命令行】

    今天爱分享给大家带来Linux 服务器log日志切割方法[三种附命令行],希望能够帮助到大家. 业务服务器上产生了一个 10G 的log文件,然后很悲催的是什么样的文本编辑器都打不开,然后只能切分一下 ...

  8. CSS三种样式表 内部样式表、行内部样式表、外部引用

    目录 CSS三种样式表 1.内部样式表 2.行内部样式表 3.外部引用: CSS三种样式表 1.内部样式表 2.行内样式表(内联式) 3.外部样式表(外链式) 1.内部样式表 内嵌式:将CSS代码集中 ...

  9. mac和windows多功能的乐谱格式批量转换器,支持midi、mscz、xml...转mp3、xml、ove、bmw、pdf等

    多功能的乐谱格式批量转换器,支持超多格式转换,以下是所有支持转换的格式列表. 支持输入的文件格式: mscz mscx xml musicxml mxl mid midi kar md cap cap ...

最新文章

  1. 二十八、顺序存储二叉树
  2. DXUT扩展之摄像机
  3. [译文]Domain Driven Design Reference(六)—— 提炼战略设计
  4. WinForm(一):开始一个WinForm程序
  5. WebRTC源码研究(27)TURN协议
  6. debian dos2unix
  7. Oracle多表关联查询
  8. ArcGIS数据编码
  9. 奔跑中的交银施罗德基金,崛起的新生代基金经理
  10. java.time.DateTimeException: Unable to extract ZoneId from temporal
  11. java判断麻将听牌,和牌看听:麻将听牌种类大全
  12. Wang Changyu
  13. Word粘贴快捷键不能用
  14. 用URL在IntentService中下载图片并更新到ImageView
  15. python对 CAD图斑面积的统计及标注
  16. ide怎么设置方法中间加一道横线_word文档编辑:如何快速设置批量脚注?
  17. DLNA介绍(包括UPnP,6月20日更新)
  18. fs7宽容度_FS7的CINE EI模式高阶指导手册(一)
  19. python 爬取m3u8 to MP4 视频
  20. 细数那些被忽视的CAD视图调整技巧

热门文章

  1. 百度拥抱年轻人,53 岁张亚勤成退休第一人!
  2. 95 后程序员一出校门就拿年薪 32 万?
  3. mysql 5.7.19 rpm下载_centos6.8 mysql5.7 rpm安装与完全卸载
  4. 第 22 章 备忘录模式
  5. day03【后台】管理员维护
  6. pixel1代android11,Pixel用户吐槽Android 11:升级后性能被劣化
  7. 两个mapreduce 做topn_Apache Hive 是怎样做基于代价的优化的?
  8. state.php,状态模式(State)
  9. ios项目 swift 定义常量 其他文件引用_面试应该注意的Swift知识点
  10. java中转为整形的编码_java中Unicode编码转化为中文