Windows命令行重定向下的c++换行符

标签 c++ windows command-line newline redirect

我发现 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/

相关文章:

c++ - 按行字典排序的文件

windows - 批处理文件以在 Windows 中运行其他批处理文件

python - 为什么在使用 concurrent.futures.ProcessPoolExecuter() 进行多处理期间不止一次打印此消息?

python - 使用命令行工具组合多个图像

c++ - 在c++ xll中从excel中接收一个矩阵,修改并返回

c++ - SQLite "On delete CASCADE"在 Qt 中未级联

C++ - 使用 std::function 将成员函数传递给成员对象

c++ - 我的代码在 Windows XP 上不工作

python - 在 Python 的交互式 shell 中处理没有 try block 的异常

mysql - 从 Windows 7 命令行运行 MySQL