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));