是冲刺,冲刺..根据 C 标准在 Windows 上合法的功能

Are fprintf, fputs... functions on windows legal according to the C standard?

本文关键字:冲刺 功能 Windows 根据 标准      更新时间:2023-10-16

我想知道:为什么使用标准库写入文件会将您的n转换为rn?是C99的标准行为还是MS添加的"妥协"?如果它是标准的,按照旧的Apple惯例(r),将"toton"写入文件会"totor"吗?这里的当前行为是否允许您读取 UNIX 文件,但 UNIX 无法读取您的文件?(我喜欢阴谋论)

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

    这是为了使代码更具可移植性;你可以在程序中使用n,让它在UNIX,Windows,Mac和其他所有东西上运行。

  2. 这是 C99 的标准行为还是 MS 添加的"混合"?

    是的,这是标准的。

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

    是的,翻译行尾字符是预期的。

  4. 这里的当前行为是否允许您读取 UNIX 文件,但 UNIX 无法读取您的文件?

    不,没有阴谋。

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

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

如果您不希望出现此行为,请将文件作为二进制流而不是文本流打开。