fprintf,fputs ...在Windows上的功能是否符合C标准?

时间:2013-10-23 21:36:05

标签: c++ c windows

我想知道:为什么用标准库写入文件会将\n转换为\r\n?是C99的标准行为还是MS添加的“commidity”?如果它是标准的,使用旧的Apple约定(\r),会将"toto\n"写入文件写"toto\r"吗?这里的当前行为是否可以读取UNIX文件但UNIX无法读取您的文件?(我喜欢阴谋理论)

1 个答案:

答案 0 :(得分:4)

  1.   

    为什么用标准lib写入文件会将\ n转换为\ r \ n?

    使代码更具可移植性;你可以在你的程序中使用\n,让它在UNIX,Windows,Mac和(据说)其他所有东西上运行。

  2.   

    是C99的标准行为还是MS添加的“commidity”?

    是的,这是标准。

  3.   

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

    是的,预计会翻译行尾字符。

  4.   

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

    不,没有阴谋。

  5. 根据C11规范,§7.21.2Streams ,¶2:

      

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

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