char *str = "Hello";
printf("%c",++*str);
これにより、gccを使用するLinuxでセグメンテーション違反が発生します。最初のステートメントが次のように変わる瞬間
char str[10] = "Hello";
できます。理由は何でしょうか?
char *str = "Hello";
printf("%c",++*str);
これにより、gccを使用するLinuxでセグメンテーション違反が発生します。最初のステートメントが次のように変わる瞬間
char str[10] = "Hello";
できます。理由は何でしょうか?
文字列リテラルを変更しようとするのは未定義の動作です。
コンパイラは、それを読み取り専用メモリに自由に配置できます(おそらくあなたの場合と同じです)。読み取り専用メモリを変更しようとすると、セグメンテーション違反が発生する可能性があります。
このステートメントchar *str = "Hello";
は、文字列 "Hello"をRO-sectionに格納し、RO-sectionの領域( "Hello"が格納されている)のアドレスをstrに割り当てます。ROセクションに保存されているデータは変更できないため、セグメンテーション違反が発生します。
char str[10] = "Hello";
また間違っています。代わりに書くべきです
char str[10];
strncpy(str,"Hello",sizeof(str));