3

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)

4

1 回答 1

4
  1. 为什么使用标准库写入文件会将您的 \n 转换为 \r\n?

    是为了让代码更便携;你可以\n在你的程序中使用它并让它在 UNIX、Windows、Mac 和(假设)其他所有东西上工作。

  2. 它是根据 C99 的标准行为还是 MS 添加的“commidity”?

    是的,这是标准的。

  3. 如果它是标准的,使用旧的 Apple 约定 (\r),将“toto\n”写入文件是否会写入“toto\r”?

    是的,需要翻译行尾字符。

  4. 此处的当前行为是否使您可以读取 UNIX 文件但 UNIX 无法读取您的文件?

    不,没有阴谋。

来自 C11 规范,§7.21.2 Streams,¶2:

… 可能必须在输入和输出上添加、更改或删除字符,以符合在主机环境中表示文本的不同约定。因此,流中的字符与外部表示中的字符之间不需要一一对应。…</p>

如果您不想要这种行为,请将文件作为二进制流而不是文本流打开。

于 2013-10-23T21:40:40.370 回答