以下の例では、定数のC文字列を指す定数ポインタとしてfnを使用しています。無関係の他のconstポインタを宣言して別の定数のc-stringに代入すると、元のfnが変更されます。なぜ私はしばらく理由を把握しようとしていますが、これを引き起こす可能性のあるものは見えませんか?無関係な文字列を割り当てると、別の文字列が変更されるのはなぜですか?
出力:
オリジナルFN:sampleStrWithExtension
修正FN:randomStr2ModifiedFn
int main() {
std::string baseString = "sampleStr";
std::string randomBaseString = "randomStr2";
const char* const fn = (baseString + "WithExtension").c_str();
std::cout << "Original fn: " << fn << std::endl;
const char* const variableNotFn = (randomBaseString + "ModifiedFn").c_str();
std::cout << "Modified fn: " << fn << std::endl;
return 0;
}
'fn =(baseString +" WithExtension ").c_str()'は非常に厳密な割り当てではありません。式 'baseString +" WithExtension "によって作成された' string'オブジェクトは、この割り当てが完了した直後に破棄され、変数 'fn'は割り当てられていないメモリを指しています。 –
'x.c_str()'の存続期間は決して 'x'の存続期間を超えて延びません。 – Angew