为什么在输出可以是非ASCII时使用fopen()模式'b'(stdio.h)?

时间:2012-06-21 15:22:18

标签: c stdio

使用C标准库stdio.h,我读到输出ASCII /文本数据,应该使用模式"w"并输出二进制数据,应该使用"wb"。但为什么差异呢?

在任何一种情况下,我只是输出一个字节(char)数组,对吧?如果我在ASCII模式下输出非ASCII字节,程序仍会输出正确的字节。

2 个答案:

答案 0 :(得分:7)

某些操作系统 - 大多数名为“windows” - 并不能保证它们能够像传入文件一样完全读取和写入文件ascii。因此,在Windows上它们实际上将\ r \ n映射到\ n。在读写ascii时,这很好而且透明。但它会废弃二进制数据流。基本上,如果你希望它忠实地读取和写入文件的数据,那么它总是给windows提供'b'标志。

答案 1 :(得分:0)

在以ASCII输出时可能会发生某些转换(例如,当输出的字符是换行符时输出neline +回车符) - 具体取决于您的平台。使用二进制格式

时不会发生这种转换