2012-06-28 102 views
1

我試圖推回const char*在forloop向量中。 char_temp是一個名爲segment的結構,而chars_temp是一個結構向量。見下面我的代碼:push_back const char *

for (int bg = 0; bg < str.size(); bg++) { 
    string sym(1, str[bg]); 
    const char* bg_cc; 
    bg_cc = sym.c_str(); 

    char_temp.symbol_first = bg_cc; 
    char_temp.symbol_second = "*"; 

    chars_temp.push_back(char_temp); 
} 

的問題是,推背字符是一個指針,所以char_temp.symbol_first由同一地址。該結構需要const char*char_temp.symbol_first,那麼我怎樣才能用forloop中的不同地址填充這個向量?

我試着const char* bg_cc = new char在forloop,但bg_cc保持有相同的地址。

在此先感謝!

回答

3

我在forloop中試過const char * bg_c​​c = new char,但是bg_cc保持着相同的地址。

這很好,它有點期待。重要的是它指向到不同的地址。

您需要使用char* bg_cc = new char然後strcpysym.c_str()創建一個副本,而不僅僅指定指針sym.c_str()

+0

它通過複製char來工作。非常感謝! – Rogier

+0

@Rogier沒問題。 –

1

1)sym對象在每次「for」迭代後都會被銷燬。而bg_ccchar_temp.symbol_first指針變得無效。您需要在每個「for」迭代中爲bg_cc指針分配內存。可能與new運營商。你確定你需要const char*嗎?可能單身char就夠了?

2)看起來你把相同的物體放在chars_temp容器中。您需要爲每個循環迭代中的char_temp對象分配內存。