为什么在Windows中注入额外的\ r \n?

Dri*_*Boy 3 c++ windows

#include <iostream>
using namespace std;
int main( int argc, char *argv[])
{
    cout << "Hello\nWorld";
}

D:\test>hw |od -c
0000000   H   e   l   l   o  \r  \n   W   o   r   l   d
0000014
Run Code Online (Sandbox Code Playgroud)

为什么要\r在Windows中注入额外的内容(在Linux上不会发生)?

wal*_*lyk 7

Windows的一个功能可以追溯到MS-DOS的第一天.在那些系统中,惯例是行分隔符是字符对" \r\n".当然,在Linux/Unix/Solaris /等中,行分隔符是单个字符" \n"

有各种工具,如Linux的dos2unixunix2dos它做什么,但这种转变.事实上,每个文件传输程序都有处理它的方法.请参阅kermit模式命令.

该约定影响了MSDOS/Windows C运行时库函数fopen()(以及其他):第二个参数可以具有bt显式设置行分隔符转换.甲tEXT变换转换\r\n\n上输入和\n\r\n输出.内部b转换没有这种转变.

FILE *f1 = fopen ("somefile.txt", "rt");  /* open in text conversion mode */
FILE *f2 = fopen ("anotherfile.bin", "rb");  /* open without text conversion */
Run Code Online (Sandbox Code Playgroud)