#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
为什么额外的 \r
被注入(inject)到 windows 中(在 linux 上不会发生)?
最佳答案
这是 Windows 的一项功能,可以追溯到 MS-DOS 的最初几天。在那些系统中,约定是行定界符是字符对“\r\n
”。当然,在Linux/Unix/Solaris/etc.中,行分隔符是单个字符“\n
”
有各种实用程序,例如 Linux 的 dos2unix
和 unix2dos
,它们除了这种转换什么都不做。实际上,每个文件传输程序都有处理它的方法。请参阅 kermit
的模式命令。
约定影响了 MSDOS/windows C
运行时库函数 fopen()
(以及其他):第二个参数可以有一个 b
或 t
显式设置行分隔符转换。 t
ext 转换将输入的 \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 */
关于c++ - 为什么在windows中注入(inject)了additional\r?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6134255/