int main()
{
char *ch="girl";
int x=strlen(ch);
*ch=ch[x];
printf("%c",*ch);
getch();
return 0;
}
文字へのポインターに NULL 値を代入するときに実行時エラーが発生するのはなぜですか?
交換
char *ch = "girl"
と
char ch[] = "girl"
前者が不変メモリへのポインターを作成する場合、後者はchar[]
正しいサイズの配列を作成し、「girl」の文字 (終端のゼロバイトを含む) で初期化します。
更新:@dreamlaxに感謝
"girl"
として暗黙的に宣言されますchar *
。しかし、ほとんどの場合、コンパイラは文字列リテラルをセクション (rostrings) に配置しており、後で保護されたメモリ領域に配置されます。何かを割り当てようとすると、*ch
この保護された (またはプラットフォームによっては異なる) メモリにアクセスします。
コンパイラは char について警告するはずです*ch = "girl";
。
この
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