Cのchar [] sとchar * sの違いは何ですか?どちらもcreate's 'が文字の配列へのポインタであることを理解しています。しかしながら、
char s[] = "hello";
s[3] = 'a';
printf("\n%s\n", s);
プリントhelao
しながら
char * s = "hello";
s[3] = 'a';
printf("\n%s\n", s);
セグメンテーション違反が発生します。なぜそのような違いがあるのですか?Ubuntu12.04でgccを使用しています。
を使用するchar s[] = "hello";
と、char配列が現在の関数のスコープ内に作成されるため、関数に入るときにメモリがスタックに割り当てられます。
を使用する場合char *s = "hello";
、s
は定数文字列へのポインタであり、コンパイラは、書き込みアクセスがブロックされているプログラムのメモリブロックに保存するため、セグメンテーション違反が発生します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加