【问题标题】:How can I capture data which will be sent to stdout in c++?如何捕获将在 C++ 中发送到标准输出的数据?
【发布时间】:2011-04-16 14:52:38
【问题描述】:

如何捕获将在 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'。怎么了?

【问题讨论】:

    标签: c++ stream stdout


    【解决方案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。所以不要混淆。 :-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-19
      • 2019-04-10
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 2014-08-08
      • 2015-03-15
      相关资源
      最近更新 更多