1

const char*forloop 内のベクトルに aをプッシュバックしようとしています。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);
}

問題は、プッシュバックされた char がポインターであるため、char_temp.symbol_first同じアドレスで構成されていることです。const char*構造体にはforが必要ですがchar_temp.symbol_first、このベクターを forloop 内の異なるアドレスで埋めるにはどうすればよいですか?

const char* bg_cc = new charforloop で試しましたbg_ccが、同じアドレスを保持し続けます。

前もって感謝します!

4

2 に答える 2

4

forloop で const char* bg_c​​c = new char を試しましたが、bg_cc は同じアドレスを持ち続けます。

結構です、ある程度期待できます。重要なのは、異なるアドレスを指していることです。

にポインタを割り当てるだけでなく、コピーを作成するにはchar* bg_cc = new char、次にstrcpyfromを使用する必要があります。sym.c_str()sym.c_str()

于 2012-06-28T09:17:26.537 に答える
1

1) sym オブジェクトは、"for" 反復のたびに破棄されます。And bg_ccandchar_temp.symbol_firstポインターは無効になります。bg_ccポインターの「for」反復ごとにメモリを割り当てる必要があります。newオペレーターで可能。本当にここが必要const char*ですか?シングルcharで十分でしょうか?

2) コンテナに同じオブジェクトを入れたようchars_tempです。char_temp各ループ反復でオブジェクトにメモリを割り当てる必要があります。

于 2012-06-28T09:32:08.693 に答える