可能重复:
C/C++ Char Pointer Crash
char *p = "atl";
char c;
c = ++*p; //crashing here
为什么会崩溃?
我知道不应该为数据创建指针增量的内存。
答案 0 :(得分:8)
p
指向const
数据,即字符串文字"atl"
;这意味着,*p
无法更改。但是你试图通过写++*p
来改变它。这就是它在运行时崩溃的原因。
事实上,大多数编译器会在您编写char *p ="atl"
时发出警告。你应该写:
const char *p ="atl";
如果这样写,那么编译器会在编译时编写++*p
时给出错误。在编译时检测错误比在运行时检测错误更好。请立即在此处查看编译错误:
编译错误是:
prog.cpp:7:错误:增加只读位置'* p'
但是,如果你写
char p[] = "atl";
char c = ++*p; //ok
然后现在正确。因为现在p
是一个由字符串文字"atl"
创建的数组。它不再指向字符串文字本身。所以你可以改变数组的内容。