可能性の重複:const性
:限りあなたが好き宣言を与える必要があり、一定のAC文字列を作りたい場合、私は理解しconst char* str = "hello";
Modifying C string constants?
または
char* const str = "hello";
しかし、のような簡単な宣言:
char* str = "hello"
私は任意の手段によって文字列を変更しようとした場合 -
str[2] = 'f';
または
*(str+2) = 'f';
ように私はいつもセグメンテーションを取得しますそれはなぜですか?また
私はのconstポインタを変更するために、警告、エラーやセグメンテーション違反を取得する必要がありますしようとしていますが、私は何もしてコードをコンパイルしないと完全に実行し得るスコットあたりマイヤーズとして
const char* const str = "hello";
str = "bye";
のような宣言を行った場合。私は困惑しています。私はg ++をubuntu 11.10で使っています。
はい、私も困惑しています。適合するコンパイラは、最後に表示されたコードのスニペットを拒否する必要があります。あなたのものがそうでなければ、それはバグを含んでいます。コンパイラを責める前に、警告を無視していないことを確認してください。 –
*コードは正しくコンパイルされ、実行されます。*文字列リテラルを変更すると、**未定義動作**が発生します。これは、安全なベットがすべてオフになっているか、プログラムが動作していてもかまいません。プログラムは不正な形であり、説明されるかもしれないし、説明されない振る舞いを示すことができる。 –