2011-04-16 106 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

相關問題