无法在c中修改堆栈上的字符串

时间:2012-12-23 23:39:22

标签: c string stack

  

可能重复:
  Why does char* cause undefined behaviour while char[] doesn’t?

以下代码

int main() {
  char * st = "abc";
  *st = 'z';
  return 0;
}

正在返回分段错误。如果堆栈上的字符串不可修改,为什么它不在编译时给出错误?

2 个答案:

答案 0 :(得分:2)

堆栈上的变量st是一个指针。分配的值是字符串常量(只读)。

答案 1 :(得分:1)

char *str = "this is dangerous to modify";不是你得到的同一个字符串;它被称为字符串文字,修改它会根据标准产生未定义的行为
如果您想要一个稍后可以修改的字符串,请按以下步骤操作:

char str[] = "Some String";

然后相应地修改它。