use*_*561 3 c++ windows redirect command-line newline
我发现Windows命令行重定向会自动将'\n'替换为'\ r \n'.有没有办法避免这种情况?因为在stdout或stderr重定向之后,如果你向控制台写'\ r \n',你将得到'\ r \n \n \n'而不是'\ r \n'.
非常感谢!
你可以尝试一个简单的程序:
fprintf(stdout,"Hello, world!\r\n");
Run Code Online (Sandbox Code Playgroud)
然后你用重定向运行它:
demo 1>demo.log
Run Code Online (Sandbox Code Playgroud)
通过使用任何HEX编辑器,您会发现'\ r \n'由'\ r \n \n \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对于在字符模式下打开的任何文件描述符(与二进制模式相反)也是如此.
'\ n'是平台无关的换行符。它由编译器扩展为要编译的平台的实际换行符表示形式-Windows为'\ r \ n',* nix和朋友为'\ n',包括MacOS。
因此,这就是为什么您在十六进制编辑器中看到“ \ r \ r \ n”的原因-您在源代码中编写的“ \ r \ n”的“ \ n”已扩展为“ \ r \ r \ n”。
| 归档时间: |
|
| 查看次数: |
4090 次 |
| 最近记录: |