可能重复:
Modifying value of char pointer in c produces segfault
这是一段代码......
void main()
{
char *p="Hello";
*p= 'h'; // Segmentation fault .
}
我理解存在分段错误的事实,它也给我一个运行时错误。但我想知道,为什么它是一个运行时错误?为什么编译器在执行程序之前无法告诉我?为什么不显示COMPILE TIME ERROR?
PS:我使用的是Visual C ++ 2005 Express ..
答案 0 :(得分:2)
字符串文字实际上是char const*
类型。但是,为了与不具有const-correct的旧C代码兼容,C ++允许将它们分配给char*
。这并不意味着你真的被允许修改它们。
答案 1 :(得分:0)
你的错在编译时无法表现出来;在那里,你的陈述都是完全有效的。它是在运行时,字符串"Hello"
是只读的,而您正在尝试修改它。
答案 2 :(得分:0)
char *p="Hello";
表达式类型被视为已弃用。 "Hello"
是存储在只读存储区中的字符串文字;尝试修改这些位置是未定义的行为。在良好的平台中,它会导致崩溃/分段错误
他们表示为,
const char *p = "Hello";
表示不允许修改p
。如果您想让p
可修改,请将其声明为
char p[] = "Hello"; // 'p' is an array of size 6