分段错误和运行时错误
可能重复:
在c中修改char指针的值会产生段错误
这是一段代码...
void main()
{
char *p="Hello";
*p= 'h'; // Segmentation fault .
}
我知道有一个分段错误,它也给我一个运行时错误。但我想知道,为什么它是一个运行时错误? 为什么编译器在执行程序之前无法告诉我? 为什么它不显示编译时间错误?
PS:我使用Visual C ++ 2005 Express ..
字符串文字实际上是char const*
类型的。 但是,为了与不是常量不正确的旧C代码兼容,C ++允许将它们分配给char*
。 这并不意味着你真的被允许修改它们。
你的错在编译时不能表现出来; 在那里,你的言论是完全有效的。 在运行时,字符串"Hello"
是只读的,并且您试图修改它。
char *p="Hello";
表达式类型被认为已被弃用 。 "Hello"
是存储在只读存储区中的字符串文字; 试图修改这些位置是一个未定义的行为 。 在良好的平台上会导致崩溃/分段故障
他们表示为,
const char *p = "Hello";
这意味着p
不允许被修改。 如果你想让p
可以修改,那么声明它,
char p[] = "Hello"; // 'p' is an array of size 6
链接地址: http://www.djcxy.com/p/86955.html