2011-04-16 122 views
3

我如何捕获将发送到标准输出在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(); 

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

回答

3

写:

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。所以不要感到困惑。 :-)

+0

仍为空字符串。 – Ockonal 2011-04-16 14:59:42

+0

@Ockonal:这是行得通的。请参阅链接:http://ideone.com/W8mW8 – Nawaz 2011-04-16 15:02:37

相关问题