以下代码在第2行接收seg错误:
char *str = "string";
str[0] = 'z'; // could be also written as *str = 'z'
printf("%s\n", str);
Run Code Online (Sandbox Code Playgroud)
虽然这非常有效:
char str[] = "string";
str[0] = 'z';
printf("%s\n", str);
Run Code Online (Sandbox Code Playgroud)
经过MSVC和GCC测试.
我写了以下代码:
int main()
{
char *str = "hello";
str[0] = 'H';
printf("%s\n", str);
}
Run Code Online (Sandbox Code Playgroud)
这给了我一个分段错误,我不明白为什么.
str是pointer to char不是const char.即使是这样的情况也不应该像下面的程序那样给出编译错误:
int main()
{
const char *str = "hello";
str[0] = 'H';
printf("%s\n", str);
}
Run Code Online (Sandbox Code Playgroud)
它给出了一个错误:assignment of read-only location *str.
编辑
如果我的代码将指针放在只读位置,我不应该得到编译错误?