让人抓狂的0x0A

最近用到C语言文件内容的读写,总结一下有fread、fscanf、fwrite、fprintf、fseek、fputs、fgets等操作函数。

在使用fread读取文件时,出现了一个百思不得其解的问题:文件读取总是莫名其妙地终止,但事实上并没有到达文件尾。
使用WinHex打开文件发现,结束的地方是0x0A,后来了解到文件尾EOF就是0x0A,恍然大悟,解决办法就是将文件的打开方式设为”rb”而非”r”。

接下来是写文件,也是莫名其妙,按照字节数来看,最后生成的文件多出了1Byte,这是什么Bug!一点点排查,发现写入时多出一字节的地方写的是0x1E0A,又是0x0A,写文件时,0x0A被写为0x0D0A,这多出的一字节0x0D是什么?查看ASCII表,0x0D是\r,0x0A是\n,也就是说每到换行符,\n就写成了\r\n。原来,文本按照字节流的形式输出时,会自动将输出的/n变成/r/n,为了使得0x0A不被识别为换行符,解决办法仍旧是将输出文件的打开方式设置为”wb”而非”w”。

就是这样。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值