0
    int main()
    {
        char *ch="girl";
        int x=strlen(ch);
        *ch=ch[x];
        printf("%c",*ch);
        getch();
        return 0;
    }

文字へのポインターに NULL 値を代入するときに実行時エラーが発生するのはなぜですか?

4

3 に答える 3

2

交換

char *ch = "girl"

char ch[] = "girl"

前者が不変メモリへのポインターを作成する場合、後者はchar[]正しいサイズの配列を作成し、「girl」の文字 (終端のゼロバイトを含む) で初期化します。

于 2013-02-09T13:10:11.013 に答える
1

更新:@dreamlaxに感謝

"girl"として暗黙的に宣言されますchar *。しかし、ほとんどの場合、コンパイラは文字列リテラルをセクション (rostrings) に配置しており、後で保護されたメモリ領域に配置されます。何かを割り当てようとすると、*chこの保護された (またはプラットフォームによっては異なる) メモリにアクセスします。

コンパイラは char について警告するはずです*ch = "girl";

于 2013-02-09T12:53:03.297 に答える
-1

この

int x=strlen(ch); //x=4
*ch=ch[x]; //you are out of bounds of array, because first element is 0, so last is 3
于 2013-02-09T12:55:45.623 に答える