【问题标题】:How to reverse the redirecting output action in CPP?如何反转 CPP 中的重定向输出操作?
【发布时间】:2025-12-02 01:25:01
【问题描述】:

当我看到这个问题时,这对我来说似乎有点好笑:

cout.rdbuf(cerr.rdbuf());

是的,成功地将正常输出重定向到错误输出流。但这是噩梦,我想REVERSE这个(愚蠢的)动作。但是cerr.rdbuf(cout.rdbuf()); 在第一个命令运行后没有帮助。即输出流没有变化。

如何在 C++ 中做到这一点?

("that" 将 normal output stream 重定向回自身 (umm) 并将其与 error output stream 分开)

【问题讨论】:

  • 查一下。很容易找到。
  • 对不起?这是什么意思?
  • 通过cout.rdbuf()获得的原始流缓冲区可以保存在一个变量中。是这个问题吗?
  • 意思是做一些研究。您可以从查找 std::basic_ostream::rdbuf() 的功能开始。提示:我看到的第一个地方有一个可以构建的示例。
  • 天啊,我刚刚尝试了你的方法@PeteBecker,我发现我的问题真的很愚蠢。哎呀,打扰了,大声笑。您关于 [查找 std::basic_ostream::rdbuf() 的作用] 的建议非常有用。

标签: c++ iostream ostream


【解决方案1】:

http://www.cplusplus.com/reference/ios/ios/rdbuf/

streambuf * some_name = cout.rdbuf(); 存储正常输出流的原始地址。

cout.rdbuf(some_name);恢复

这也适用于其他类型的流。 (虽然它也适用于输入流,但没有理由这样做。)

【讨论】: