我发现 Windows 命令行重定向会自动将 '\n' 替换为 '\r\n'。有什么方法可以避免这种情况?因为在 stdout 或 stderr 重定向之后,如果您将 '\r\n' 写入控制台,您将得到 '\r\r\n' 而不是 '\r\n'。
非常感谢!
你可以试试一个简单的程序:
fprintf(stdout,"Hello, world!\r\n");
然后你用重定向运行它:
demo 1>demo.log
通过使用任何十六进制编辑器,您会发现 '\r\n' 由 '\r\r\n' 表示。
更新:
@steve-jessop 我已经通过使用 setmode
解决了这个问题,这将强制 stdout
使用 O_BINARY
模式。所以流不会将 \n
翻译成 \r\n
。
非常感谢!
最佳答案
避免的方法就是不写"Hello, world!\r\n"
. fprintf(stdout,"Hello, world!\n");
或 std::cout << "Hello, world!" << std::endl;
就足够了。
这不是命令行重定向或 stdout
所特有的,对于以字符模式(与二进制模式相反)打开的任何文件描述符也是如此。
关于Windows命令行重定向下的c++换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6891252/