我想知道:为什么用标准库写入文件会将\n
转换为\r\n
?是C99
的标准行为还是MS
添加的“commidity”?如果它是标准的,使用旧的Apple约定(\r)
,会将"toto\n"
写入文件写"toto\r"
吗?这里的当前行为是否可以读取UNIX文件但UNIX无法读取您的文件?(我喜欢阴谋理论)
答案 0 :(得分:4)
为什么用标准lib写入文件会将\ n转换为\ r \ n?
使代码更具可移植性;你可以在你的程序中使用\n
,让它在UNIX,Windows,Mac和(据说)其他所有东西上运行。
是C99的标准行为还是MS添加的“commidity”?
是的,这是标准。
如果它是标准的,使用旧的Apple约定(\ r),将“toto \ n”写入文件写“toto \ r”?
是的,预计会翻译行尾字符。
此处的当前行为是否可以读取UNIX文件但UNIX无法读取您的文件?
不,没有阴谋。
根据C11规范,§7.21.2Streams ,¶2:
...可能必须在输入和输出上添加,更改或删除字符,以符合在主机环境中表示文本的不同约定。因此,流中的字符与外部表示中的字符之间不需要一一对应。 ...
如果您不想要此行为,请将文件作为二进制流而不是文本流打开。