2016-06-09 83 views
0

这是我的代码:为什么在下面的代码段错误?

char * name[]={"Dileep","Avina"}; 
name[0][1]='A'; 

这里的名字[0]是一个字符*指向字符串文字 “迪利普”。那么名称[0] [1]是什么?为什么它给我的运行时错误?

+6

字符串文字是不变的,你不能改变它们。 – tkausl

+1

[为什么在写入以“char \ * s”初始化但不是“char s \ [\]”的字符串时为什么会出现分段错误?](http://stackoverflow.com/questions/164194/为什么这样做 - 分段错误 - 当写入字符串初始化 - 用cha) –

+0

在编写C++时停止使用'const char *'或'char *',使用'std :: string'。 –

回答

3

“Dileep”和“Avina”是字符串常量。试图改变它们是未定义的行为。如果操作系统将它们放在只读存储器中,则会出现故障。

0

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。

相关问题