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