【发布时间】:2012-12-23 23:39:21
【问题描述】:
可能重复:
Why does char* cause undefined behaviour while char[] doesn’t?
以下代码
int main() {
char * st = "abc";
*st = 'z';
return 0;
}
正在返回分段错误。如果堆栈上的字符串不可修改,为什么在编译时不报错?
【问题讨论】:
-
字符串文字是只读的。改为声明一个 char array。这是一个非常常见的问题,顺便说一句。有关示例,请参阅 this question。
-
字符串不在栈上。它在数据段中。 (指向字符串的指针在堆栈上)。
-
出于兼容性原因,它不会给出编译时错误。
"abc"的类型实际上是char const[4],这会产生编译器错误。 -
@K-ballo 不在 C 中,
"abc"在 C++ 中是const char[4],但在 C 中是char[4]。一个你不能尝试修改,但类型不会告诉你的。