2013-03-30 2 views
1

Я видел cout.rdbuf() in например here. Это означает, что поток cout имеет связанный с ним буфер потока, который не является пустым, прежде чем мы его очистим.когда может std :: 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; 

Но в нынешнем виде кода, все будут сброшены на экран после первой строки ..

Итак, какой вид конструкции позволяет мне заглянуть внутрь буфера соиЬ?

PS. im работает VC++ 2010 на windows7

+0

Прочтите [ссылку на систему потоков C++ ] (Http://en.cppreference.com/w/cpp/io)? –

+0

Я пробовал и не смог .. Возможно, нужно попробовать еще –

+0

Ответ (теперь удален) Дэвида - способ получить буфер. Однако, если он покраснел, он будет пустым. Вы можете проверить флаги формата ['ios_base'] (http://en.cppreference.com/w/cpp/io/ios_base/fmtflags), чтобы узнать, установлен ли' unitbuf', в этом случае вывод очищается после каждого вывода. –

ответ

0

Я думаю, что это не флеш после первой строки, но я абсолютно НЕ уверен. Я испытал, что endl сбрасывает, но другие не делают, возможно, что слишком много символов автоматически сбрасывается, но я не знаю. я создал (случайно) программу, как это (вкратце):

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

Программа этого побежал, и результат будет отлаживать, но это ничего не написал для меня, так что я думал, что программа Безразлично «т попасть ...

+0

Это будет называться «буферизация строк». Это означает, что буфер не будет сброшен до тех пор, пока не будет вставлена ​​новая строка, первое или N-е время. –

0

После ссылки тесно связана с этой темой C++ buffered stream IO

(Но я до сих пор не знаю, как/когда, чтобы получить cout.rdbuf() на строку.)

Смежные вопросы