Q.
下記のように文字列リテラルは変更できるか?
char *str = "ABC";
str[0] = 'D';
A.
文字列は、一旦文字型配列に格納してから処理をするのが無難
char str = "ABC";
strcpy(str, "DEF");
文字列リテラルは、通常、プログラムの静的メモリ領域に格納され、変更することはできません。文字列リテラルを直接変更しようとすると、文字列リテラルの変更は未定義(何が起こるかわからないということ)です。
書き換える必要のある文字列は、一旦文字型配列に格納してから処理をするのが無難だと言えます。
char str = "ABC";
strcpy(str, "DEF");
上記のコードでは、"ABC"
という文字列リテラルがstr
という名前の文字配列にコピーされ、その後で"DEF"
に書き換えられています。この場合は、str
は変更可能なメモリ領域に存在するため、問題なく動作します。