c++ - 如何捕获将在 C++ 中发送到标准输出的数据?

标签 c++ stream stdout

在 C++ 中如何捕获将发送到标准输出的数据?

我在这里找到:

   // This can be an ofstream as well or any other ostream
   std::stringstream buffer;

   // Save cout's buffer here
   std::streambuf *sbuf = std::cout.rdbuf();

   // Redirect cout to our stringstream buffer or any other ostream
   std::cout.rdbuf(buffer.rdbuf());

   std::cout << "Hello!";

   // When done redirect cout to its old self
   std::cout.rdbuf(sbuf);

   std::cout << "STD data: \n";
   std::cout << buffer.get();

这行不通。 'Hello' 仍然在 'STD data:' 之前输出,并且 buffer.get() 返回 '-1'。怎么了?

最佳答案

写:

  std::cout << buffer.str(); //not buffer.get();

现在它的工作:http://ideone.com/W8mW8


顺便说一下,std::stringstream::get() 返回 std::istream。看到这个:

http://www.cplusplus.com/reference/iostream/istream/get/

回想一下,std::stringstream 派生自 std::istream。所以不要混淆。 :-)

关于c++ - 如何捕获将在 C++ 中发送到标准输出的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5687312/

相关文章:

c++ - 从文件读取值时附加到输出的垃圾

C 停止 stdout 刷新

c++ - 将 CreateProcess() 的标准输出重定向到管道并在另一个进程中读取它 c++ windows

c++ - 新 std::map 条目中指针的默认值

c++ - 为什么我们应该尽量减少循环中 break 和 continue 的使用?

javascript - Node.js 中面向行的流

makefile - 如何解开并行 make -j 编译器消息?

c++ - 如何使用 C++17 中的 type_traits 检测具有特定名称和签名的函数(非类成员)的存在

c++ - 如何在 C++ 中分配可变参数/变量参数

c++ - Qt C++ - QDataStream 不读取 bool 值