重複の可能性:
C文字列定数を変更しますか?
const char vs char array vs std::stringへのポインタ
私はおそらくこの質問で死んだ馬を打ち負かしていることを知っていますが、私は少し混乱していて、SOまたはgoogleで正確な答えを見つけることができませんでした(私は正しいと確信しています-情報が多すぎますふるいにかけるCストリング上)。また、特にCスタイルの文字列について話しているにもかかわらず、私が興味を持っているのはC++というタグを付けました。
この状況では:
char const a* = "hello";
char const b[] = "goodbye";
「hello」と「goodbye」はどちらも不変の文字列だと思っていたでしょう。なぜなら、それらは文字列リテラルから来ており、charconst*に減衰するはずだからです。
ただし、この特定のケースでは、b配列から定数を取り除いた場合、「こんにちは」の変更は定義されていませんが、「さようなら」の変更は問題ありません。
bの場合、文字列はユーザー定義の配列に格納されているため、文字列は変更可能であると思います。
この場合、こんにちはとさようならは違いますか? この例では、何らかの理由で文字列リテラルではなく、さようならです。また、さようならが文字列リテラルでない場合、それはグローバルメモリに保持されておらず、コンパイル後の参照はユーザー配列セルに残っているものだけであると想定できますか?