C++ 是fprintf,fputs。。。windows legal上的函数是否符合C标准?

C++ 是fprintf,fputs。。。windows legal上的函数是否符合C标准?,c++,c,windows,C++,C,Windows,我想知道:为什么用标准库写入文件会将\n转换为\r\n?它是符合C99的标准行为还是MS添加的“承诺”?如果它是标准的,按照旧的苹果惯例,(\r),将“toto\n”写入文件会写入“toto\r”?当前的行为是否让您可以读取UNIX文件,但UNIX无法读取您的文件?(我喜欢阴谋论) 为什么使用标准库写入文件会将\r\n转换为\r\n 这是为了使代码更具可移植性;您只需在程序中使用\n,就可以让它在UNIX、Windows、Mac和(据说)其他所有设备上运行 这是C99的标准行为还是MS添加的

我想知道:为什么用标准库写入文件会将
\n
转换为
\r\n
?它是符合
C99
的标准行为还是
MS
添加的“承诺”?如果它是标准的,按照旧的苹果惯例,
(\r)
,将
“toto\n”
写入文件会写入
“toto\r”
?当前的行为是否让您可以读取UNIX文件,但UNIX无法读取您的文件?(我喜欢阴谋论)

  • 为什么使用标准库写入文件会将\r\n转换为\r\n

    这是为了使代码更具可移植性;您只需在程序中使用
    \n
    ,就可以让它在UNIX、Windows、Mac和(据说)其他所有设备上运行

  • 这是C99的标准行为还是MS添加的“承诺”

    是的,这是标准的

  • 如果它是标准的,按照旧的Apple约定(\r),将“toto\n”写入文件会写入“toto\r”吗

    是的,需要翻译行尾字符

  • 当前的行为是否允许您读取UNIX文件,但UNIX无法读取您的文件

    不,没有阴谋

  • 根据C11规范,§7.21.2流,^2:

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

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