可能重复:
char *p = "atl";
char c;
c = ++*p; //crashing here
为什么它会崩溃?
我知道内存不是创建的,因为指针增量应该是对数据进行的。
发布于 2011-07-15 20:13:45
p
指向const
数据,这是字符串文本"atl"
;这意味着*p
不能更改。但是你试图通过编写++*p
来改变它。这就是为什么它在运行时崩溃的原因。
事实上,大多数编译器在编写char *p ="atl"
时都会发出警告。你应该写:
const char *p ="atl";
如果是这样写的,那么编译器在编译时编写++*p
时会出现错误。在编译时检测错误比在运行时检测错误要好。请参见此处的编译错误:
编译错误是:
prog.cpp:7: error:只读位置‘*p’的增量
但是,如果你写
char p[] = "atl";
char c = ++*p; //ok
那现在是正确的。因为现在p
是一个数组,它是由字符串文本"atl"
创建的。它不再指向字符串文本本身。这样就可以更改数组的内容。
https://stackoverflow.com/questions/6715260
复制相似问题