c++ - 为什么在windows中注入(inject)了additional\r?

标签 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

为什么额外的 \r 被注入(inject)到 windows 中(在 linux 上不会发生)?

最佳答案

这是 Windows 的一项功能,可以追溯到 MS-DOS 的最初几天。在那些系统中,约定是行定界符是字符对“\r\n”。当然,在Linux/Unix/Solaris/etc.中,行分隔符是单个字符“\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 */

关于c++ - 为什么在windows中注入(inject)了additional\r?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6134255/

相关文章:

.net - 防止单个可执行文件的多个进程实例

c++ - 线程安全的 Hook 函数

windows - windows下ffmpeg libcdio输入设备

mfc - MFC 中的可折叠控件(包含示例)

c++ - 是否有用于为命令行项目创建菜单的开源跨平台 C++ 库?

c++:为什么在提供模板函数的所有类型参数时出现错误,但在省略参数时正常?

c++ - 在 Windows Compact 2013 中标记存储卷

c++ - SSE 优化循环,在数组中查找零并切换标志 + 更新另一个数组

c++ - 为什么一个子线程的执行时间比整个应用程序的执行时间多

python - 诅咒 window.getstr()