2

文字列「hello」を「Hello」に変更しようとしていますが、機能していません。エラーも発生しません。なぜ機能しないのか説明してください。

#include <stdio.h>

int main() {
    char *arr[] = {"hello" , "world"};
    char **p = arr;
    printf("%s\n",arr[0]);
    *(*(p+0)+1) = 'H';
    printf("%s\n",arr[0]);
    return 0;
}
4

3 に答える 3

6

文字列リテラルは型char[]であり、読み取り専用メモリに格納されます。それらを変更することはできません。

それらを変更したい場合は、char 配列を作成する必要があります。あなたが持っているのはポインタの配列です。

あなたはこれを行うことができます:

char foo[] = "Hello";
foo[0] = 'G';
printf("%s", foo);
于 2013-03-10T14:00:44.693 に答える
3

文字列リテラルを変更することはできないため (非 const の配列型であるにもかかわらずchar)。プログラムは、未定義の動作をそのまま呼び出します。

于 2013-03-10T14:01:04.017 に答える
0
char *arr[] = {"hello" , "world"};  

arr は char へのポインターの配列であるため、ポインターが指している文字列リテラルを変更することはできません。

char arr[][6] = {"hello" , "world"}; 

arr は、文字の 2 次元配列、または 2 つの文字列の配列です。それらは変更できますが、配列の 2 番目の次元の長さを指定する必要があります。最長のストリングを保持するのに十分な大きさが必要です。

于 2013-03-10T15:32:00.163 に答える