2013-03-30 108 views
1

我看過cout.rdbuf(),例如here。這意味着,流cout有一個與它關聯的流緩衝區,在我們刷新它之前它是非空的。什麼時候可以std :: cout緩衝區是非空的?

但是,我怎麼能在cout被刷新之前窺視cout的cout流緩衝區?

cout << "I want to read this before this get flushed"; 
cout.UnknownFunction(); //this would save the buffer into a string variable 
cout << flush; 

但在代碼的目前的形式,一切都將在第一行後刷新到屏幕上..

那麼,什麼樣的結構允許我到COUT緩衝區內偷看?

PS。即時通訊在Windows7上運行VC++ 2010

+0

閱讀[C++流系統的參考](http://en.cppreference.com/w/cpp/io)? –

+0

我試過了,失敗了..也許需要試試更多 –

+0

David的(現在刪除的)答案是獲得緩衝區的方法。但是,如果它被刷新,它將是空的。您可以檢查['ios_base'格式標誌](http://en.cppreference.com/w/cpp/io/ios_base/fmtflags)以查看是否設置了'unitbuf',在這種情況下,輸出在每次輸出操作。 –

回答

0

我認爲這不會沖洗第一行後,但我絕對不知道。 我經歷過endl沖洗,但其他人沒有,可能是太多的字符自動沖洗,但我不知道。 我創建(意外)這樣的程序(簡稱):

cout << "x"; 
while (true) {} 

程序運行起來這個,輸出將調試,但它並沒有給我寫過什麼,所以我認爲沒有按程序「T那裏......

+0

這將被稱爲「行緩衝」。這意味着緩衝區在第一次或第N次插入換行之前不會被刷新。 –

0

下面的鏈接是密切相關的這個話題 C++ buffered stream IO

(但我還是不知道如何/時獲得cout.rdbuf()到串上。)