2013-10-31 28 views
0

我拼命嘗試在ostringstream中寫入數據,然後將數據傳送到其他對象的istringstream中或文件中。從ostringstream傳遞到istringstream和文件

std::ostringstream oss; 
oss << "Hello World"; 

對於第一個目的,我試試這個:

iss.basic_ios<char>::rdbuf(oss.rdbuf()); 

但是一個簡單的 「iss.str()」 返回什麼都沒有。 (第一個問題)

後來,當我嘗試:

std::ofstream ofs("test.txt"); 
ofs << oss.rdbuf(); 
ofs.close(); 

沒有寫入該文件test.txt的英寸(第二個問題)

預先感謝您對stringstream和streambuf之間的內部關係的任何解釋。

回答

0

你在誤會 - 做iss.basic_ios<char>::rdbuf(oss.rdbuf())只改變輸入字符串流的內部指針指向另一個輸出字符串流的緩衝區。它對iss的內部緩衝區的內容沒有影響(即沒有數據傳輸)。

據我所知得到輸入字符串流的區域可能是無效的並且完全沒有被它的實現使用。我不認爲有任何改變這種情況的方法。

+0

那麼,將issbuf中的streambuf遊標設置爲開始會有趣嗎? (即使在oss繼續使用時設置streambuf可能會很危險) – fcaillaud

+0

或者我有義務將stringstream複製爲:iss.str(oss.str())和ofs << oss.str()? – fcaillaud

+1

@ user2928422我認爲後者是最合乎邏輯和直接的解決方案,所以是:'ofs << oss.str()'。 – 0x499602D2