私は奇妙な問題があります。私は、構造体配列のchar []の値を割り当てるが、それらは迷子: -------構造体はこの1つである:C++構造体の値が失われました
typedef struct _Settings
{
const char* str;
uint val;
}Settings;
-------私はこのようにそれを作成します。
int nn=10;
settings = new Settings[nn];
for (int i = 0; i < nn; i++) {
string strr = "thisOneIs";
strr.append(std::to_string(i));
settings[i].str = strr.c_str();
string teststr = settings[i].str; //// (1)
settings[i].val = i + 1;
}
.....(1)で、正しい値が得られます。
しかし、私は、その後の.str [i]の設定、(右上記のコードの後に同じ場所、)これを呼び出す場合は、空である:
for (int i = 0; i < nn; i++) {
string teststr = settings[i].str; ///// (2)
std::cout << settings[i].str << "=" << settings[i].val << "\n";
}
...(2)、私は空の取得で。
誰かがヒントを持っていますか?ありがとう!
strrは、自動保存期間を持つローカル変数です。そのスコープは、forループのブロックコードです。ループを終了した後、変数はもう生きていないので、対応するポインタは無効です。 –
'const char * str'はポインタで、スコープの最後で破棄される一時的なオブジェクトを指します。何を期待していますか? –
あなたはそうです。しかし、文字列の値をstrrからsettings [i] .strに永久にコピーするにはどうすればよいですか? – Steve