I was wondering: why does writing in a file with the standard lib converts your \n
into \r\n
? Is it standard behaviour according C99
or a "commidity" added by MS
? If it is standard, with the old Apple convention (\r)
, would writing "toto\n"
to a file write "toto\r"
? Is the current behaviour here so that you could read UNIX file but UNIXes could not read yours?(I love conspiracy theories)
问问题
208 次
1 回答
4
为什么使用标准库写入文件会将您的 \n 转换为 \r\n?
是为了让代码更便携;你可以
\n
在你的程序中使用它并让它在 UNIX、Windows、Mac 和(假设)其他所有东西上工作。它是根据 C99 的标准行为还是 MS 添加的“commidity”?
是的,这是标准的。
如果它是标准的,使用旧的 Apple 约定 (\r),将“toto\n”写入文件是否会写入“toto\r”?
是的,需要翻译行尾字符。
此处的当前行为是否使您可以读取 UNIX 文件但 UNIX 无法读取您的文件?
不,没有阴谋。
来自 C11 规范,§7.21.2 Streams,¶2:
… 可能必须在输入和输出上添加、更改或删除字符,以符合在主机环境中表示文本的不同约定。因此,流中的字符与外部表示中的字符之间不需要一一对应。…</p>
如果您不想要这种行为,请将文件作为二进制流而不是文本流打开。
于 2013-10-23T21:40:40.370 回答