2011-11-17 90 views
4

我有一個vector<char>的數據,我想寫入std::stringstream如何使用stringstream編寫?

我想:

my_ss.write(vector.data(), vector.size()); 

...但它似乎置入任何my_ss我聲明如下:

std::stringstream my_ss( std::stringstream::binary);

爲什麼寫不工作(應用程序不會崩潰並編譯0錯誤,0警告)?

+2

我們看一些實際代碼。 (而'std :: basic_ios :: binary'對'stringstream'沒有任何影響,它們總是「二進制的」。) –

回答

8

對於「我該怎麼辦呢」,你可以使用一個std::ostream_iterator

std::copy(vector.begin(), vector.end(), std::ostream_iterator<char>(my_ss)); 

完整的示例:

#include <iterator> 
#include <sstream> 
#include <vector> 
#include <iostream> 
#include <algorithm> 

int main() { 
    std::vector<char> vector(60, 'a'); 
    std::ostringstream my_ss; 
    std::copy(vector.begin(), vector.end(), std::ostream_iterator<char>(my_ss)); 
    std::cout << my_ss.str() << std::endl; 
} 

你也可以只用它來直接構建string,足不出戶通過stringstream在所有:

std::string str(vector.begin(), vector.end()); // skip all of the copy and stringstream 
+0

這個答案可能給出一個錯誤的想法,就好像'stringstream :: write()不能使用。事實上,OP的問題似乎不是用'stringstream :: write()',而是用'std :: stringstream my_ss(std :: stringstream :: binary);',它可以固定到'std :: stringstream my_ss (std :: stringstream :: out | std :: stringstream :: binary);'作爲其他答案的建議。 –

4

雖然你哈ven't給出任何代碼,它聽起來就像你可能只是寫道:

std::stringstream my_ss (std::stringstream::binary); 

如果您想寫信給你需要的標誌std::stringstream::out在構造函數中結合了字符串流。如果我是正確的,那麼你會看到的東西做工精細,如果你把它改爲:

std::stringstream my_ss (std::stringstream::out | std::stringstream::binary); 

(顯然,如果你想從字符串流,你需要添加std::stringstream::in閱讀)

UPDATE現在你已經給你的代碼......這是你的具體問題。注意@ awoodland的觀點是,你只需要從一個chars向量構造一個字符串(如果這是你計劃用這個流做的唯一的事情)。

3

stringstream中字符串模式的默認參數在外面。

explicit basic_stringstream(ios_base::openmode _Mode = 
    ios_base::in | ios_base::out) 
    : _Mybase(&_Stringbuffer), 
     _Stringbuffer(_Mode) 
    { // construct empty character buffer 
    } 

您需要添加字符串流::您是否通過明確的東西像字符串流:二進制

或者只是使用std :: ostringstream