2013-02-08 72 views
1

我仍然從Java轉向C++,而我正在努力拼湊字符串。我需要生成一些字符串並將它們存儲在某個地方,以便在創建它們的對象被銷燬之後它們可用於我的程序。我試圖將它們存儲在一個字符串的矢量中,但我得到一個分段錯誤 - 雙免費。的我在做什麼,並能重現問題的基本版本是在這裏:如何在C++中將生成的字符串存儲在向量中?

storage[0] = makeString(); 

我會感謝什麼是很多和洞察力:

#include <string> 
#include <sstream> 
#include <iostream> 
#include <vector> 

std::string makeString(){ 
    std::stringstream s; 
    s << "Test string"; 
    return s.str(); 
} 

int main(){ 
    std::vector<std::string> storage; 
    storage.reserve(1); 
    storage[0] = makeString(); 
    return 0; 
} 

調試器在該行標誌着錯誤在這裏,以及如何避免它,請。

+0

快速修復是使用'resize'而不是'reserve'。試圖模擬一個Java StringBuilder也不是最好的想法。他們是不同的語言。 – 2013-02-08 12:42:51

+0

我沒有錯誤,當我編譯這個!。你可以發佈錯誤嗎? – Vijay 2013-02-08 12:46:57

回答

5

vector.reserve不改變向量的大小。您將不得不使用resize而不是reserve。另一個選擇是使用push_back()

storage.push_back(makeString()); 
+0

如果你希望避免在插入過程中重新分配,你可以使用'reserve'和'push_back'(或者插入迭代器等)。 – 2013-02-08 13:00:31

+0

謝謝!調整大小解決了我的問題。 (我真的需要使用賦值而不是push_back)。 – Blackzafiro 2013-02-08 13:26:44

相關問題