可能重复:
Why does char* cause undefined behaviour while char[] doesn’t?
以下代码
int main() {
char * st = "abc";
*st = 'z';
return 0;
}
正在返回分段错误。如果堆栈上的字符串不可修改,为什么它不在编译时给出错误?
答案 0 :(得分:2)
堆栈上的变量st是一个指针。分配的值是字符串常量(只读)。
答案 1 :(得分:1)
char *str = "this is dangerous to modify";
不是你得到的同一个字符串;它被称为字符串文字,修改它会根据标准产生未定义的行为
如果您想要一个稍后可以修改的字符串,请按以下步骤操作:
char str[] = "Some String";
然后相应地修改它。