0

重複の可能性:
char a [] =“ string”;の違いは何ですか。およびchar*p =“ string”;

char *str = "Hello";
printf("%c",++*str);

これにより、gccを使用するLinuxでセグメンテーション違反が発生します。最初のステートメントが次のように変わる瞬間

char str[10] = "Hello";

できます。理由は何でしょうか?

4

2 に答える 2

3

文字列リテラルを変更しようとするのは未定義の動作です。

コンパイラは、それを読み取り専用メモリに自由に配置できます(おそらくあなたの場合と同じです)。読み取り専用メモリを変更しようとすると、セグメンテーション違反が発生する可能性があります。

于 2012-06-19T09:25:29.980 に答える
-1

このステートメントchar *str = "Hello";は、文字列 "Hello"をRO-sectionに格納し、RO-sectionの領域( "Hello"が格納されている)のアドレスをstrに割り当てます。ROセクションに保存されているデータは変更できないため、セグメンテーション違反が発生します。

char str[10] = "Hello";

また間違っています。代わりに書くべきです

char str[10];
strncpy(str,"Hello",sizeof(str));
于 2012-06-19T09:35:25.650 に答える