push_back const char *

时间:2012-06-28 09:13:44

标签: c++ string pointers vector const

我正试图在forloop中的向量中推回const char*char_temp是一个名为segment的结构,chars_temp是结构的向量。请参阅下面的代码:

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);
}

问题是push backed char是一个指针,因此char_temp.symbol_first包含相同的地址。结构需要const char* char_temp.symbol_first,那么如何在forloop中使用不同的地址填充此向量?

我在forloop中尝试const char* bg_cc = new char,但bg_cc保持相同的地址。

提前致谢!

2 个答案:

答案 0 :(得分:4)

  

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

没关系,有点期待。重要的是它指向到不同的地址。

您需要使用char* bg_cc = new char然后strcpy sym.c_str()来创建副本,而不只是将指针指向sym.c_str()

答案 1 :(得分:1)

1)每次“for”迭代后sym对象都会被销毁。 bg_ccchar_temp.symbol_first指针无效。您需要在bg_cc指针的每个“for”迭代中分配内存。 new运算符可能。你确定在这里需要const char*吗?可能单char就足够了吗?

2)看起来你把同一个对象放在chars_temp容器中。您需要在每个循环迭代中为char_temp对象分配内存。