❤恋するコンピュータサイエンス❤

コンピュータサイエンス、3DCGをもっと楽しく、もっと本質的に!c言語、c++の記事中心です

文字列リテラルは変更できるか?

Q.
下記のように文字列リテラルは変更できるか?

char *str = "ABC";
str[0] = 'D'; 

 

 

A.

文字列は、一旦文字型配列に格納してから処理をするのが無難

char str = "ABC";

strcpy(str, "DEF");


文字列リテラルは、通常、プログラムの静的メモリ領域に格納され、変更することはできません。文字列リテラルを直接変更しようとすると、文字列リテラルの変更は未定義(何が起こるかわからないということ)です。

 

書き換える必要のある文字列は、一旦文字型配列に格納してから処理をするのが無難だと言えます。

char str = "ABC";

strcpy(str, "DEF");


上記のコードでは、"ABC"という文字列リテラルstrという名前の文字配列にコピーされ、その後で"DEF"に書き換えられています。この場合は、strは変更可能なメモリ領域に存在するため、問題なく動作します。