-1

可能重复:
为什么 char* 会导致未定义的行为,而 char[] 不会?

以下代码

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

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

4

2 回答 2

2

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

于 2012-12-23T23:45:37.527 回答
1

char *str = "this is dangerous to modify";不是你得到的相同意义上的字符串;它被称为字符串文字并根据标准对其进行修改会产生未定义的行为。

如果您想要一个稍后可以修改的字符串,请执行以下操作:

char str[] = "Some String";

然后相应地修改它。

于 2012-12-23T23:48:22.643 回答