让人抓狂的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”。

就是这样。

你可能感兴趣的:(二进制,文件读取,0x0D,0x0A)