这是我的代码:为什么在下面的代码段错误?
char * name[]={"Dileep","Avina"};
name[0][1]='A';
这里的名字[0]是一个字符*指向字符串文字 “迪利普”。那么名称[0] [1]是什么?为什么它给我的运行时错误?
这是我的代码:为什么在下面的代码段错误?
char * name[]={"Dileep","Avina"};
name[0][1]='A';
这里的名字[0]是一个字符*指向字符串文字 “迪利普”。那么名称[0] [1]是什么?为什么它给我的运行时错误?
“Dileep”和“Avina”是字符串常量。试图改变它们是未定义的行为。如果操作系统将它们放在只读存储器中,则会出现故障。
name [0]是指向字符串文字“Dileep”的char *。
不,char * name[]
是虚假的。 "Dileep"
是string literal,其类型为const char[7]
,并且从C++ 11开始,由于从字符串文字到char *
的转换,您的代码是不允许的。 char * name[]={"Dileep","Avina"};
应该是const char * name[]={"Dileep","Avina"};
。
那么名称[0] [1]是什么?
它应该是const char
。
为什么它给我的运行时错误?
修改字符串文字是UB。
字符串文字是不变的,你不能改变它们。 – tkausl
[为什么在写入以“char \ * s”初始化但不是“char s \ [\]”的字符串时为什么会出现分段错误?](http://stackoverflow.com/questions/164194/为什么这样做 - 分段错误 - 当写入字符串初始化 - 用cha) –
在编写C++时停止使用'const char *'或'char *',使用'std :: string'。 –