2013-12-22 77 views
3

我努力學習字符串流,我有以下代碼:stringstream輸出的原因是什麼?

#include <iostream> 
#include <sstream> 
using namespace std; 

int main() 
{ 
    stringstream os; 
    os.str("Purohit"); 
    os << "Vipul" << endl; 
    cout << os.str() << endl; 
} 

當我編譯並運行它,我得到以下的輸出:

Vipul 
t 

爲什麼?不應該這個輸出Purohit Vipul?

+0

解決這個問題的最簡單方法就是用字符串初始化它。 – chris

+0

@chris你是什麼意思?而且,你能解釋爲什麼會發生? – user2943407

+0

'stringstream os(「Purohit」);'。簡單,除了'std :: ostringstream'應該被使用,因爲你只使用'operator <<'。無論如何,我確定這裏有關於'str' *某處*的工作原理的解釋。實際上是多個。 – chris

回答

7

這是因爲str方法替換了stringstresm的內容,而不在後面的寫入放置緩衝區指針。這就是爲什麼當你輸出"Vipul\n"它寫在你放置到前面的流"Purohit"字符串:

初始狀態

0 1 2 3 4 5 6 
P u r o h i t 
^ 

<<寫後:

0 1 2 3 4 5 6 
V i p u l \n t  

你可以稱之爲seekg在追加"Vipul"字符串之前設置位置,但更容易的修復方法是使用<<進行寫入。

+0

+++爲圖 – keyser

+0

謝謝,它工作正常。但有一個問題,當我們在stringstream中輸入一個新的元素時,它總是寫一個新行,對吧?所以我不能在同一行輸出它們。 – user2943407

+0

@ user2943407,如果你在插入的內容中有一個換行符,它只會插入一個換行符。 – chris

相關問題