2015-12-10 34 views
0

我需要寫char*緩衝區std::stringstream在特定的位置,通過API讀寫我設法拼湊下面的代碼:如何在位置字符串流

std::stringstream ss; 
char * str = "123"; 
ss.seekp(0); 
ss.write(str, 3); 
ss.seekp(1); 
ss.write(str, 3); 
std::cout << ss.str(); //expecting 1123 

但是不能按預期工作 - 或者更準確地說根本不起作用(沒有任何被寫入流中),原因似乎是.seekp()


我好不容易纔確認我suspition:在.seekp()惹的禍,消除ss.seekp(0)後:

std::stringstream ss; 
char * str = "123"; 
// remove this line: ss.seekp(0); 
ss.write(str, 3); 
ss.seekp(1); 
ss.write(str, 3); 
std::cout << ss.str(); //expecting 1123 

它打印1123預期。奇怪的是,在上調用ss.seekp(0)流呈現不可用。請有人解釋我爲什麼如此(C++文檔中的一個源代碼)?

+0

這聽起來像一個XY問題。你究竟在努力完成什麼? – NathanOliver

+0

@NathanOliver我正在實施RAM磁盤,並且我決定最少的工作是使用'std :: stringstream'作爲'File'類的後端存儲...所以我想我正在嘗試*正是我所描述的。我需要將輸入以任意大小的char *緩存(以及包括覆蓋彼此的位置)的形式存儲到一個數據「存儲」中。 – wondra

+1

適用於我:http://ideone.com/r6fbNe – PaulMcKenzie

回答

2

的問題是seekp參數:

ss.seekp(0) 

在0相對於開始講述的流位置(即絕對),但...流是空的,而且也沒有位置0 變化它與

ss.seekp(0, std::ios_base::end); 

以這種方式它工作。

+0

你可能意思是'std :: ios_base :: beg',但是謝謝你的答案 - 設置方向是關鍵。是否有文檔/來源找到這些錯誤?我的意思是'seekp(0)'使流不可用看起來像一個錯誤/無證行爲給我。 – wondra