为什么增加指针崩溃指向的数据?

Sur*_*uri 2 c++ visual-c++

可能重复:
C/C++ Char指针崩溃

char *p = "atl";
char c;
c = ++*p; //crashing here
Run Code Online (Sandbox Code Playgroud)

为什么会崩溃?

我知道不应该为数据创建指针增量的内存.

Naw*_*waz 8

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".它不再指向字符串文字本身.所以你可以改变数组的内容.