这是我的代码:
char * name[]={"Dileep","Avina"};
name[0][1]='A';
这里 name[0] 是一个字符*,指向字符串文字"Dileep"。那么名字[0][1]会是什么?为什么它会给我运行时错误?
Dileep"和"Avina"是字符串常量。 试图改变它们是未定义的行为。 如果操作系统将它们放在只读内存中,您将出现故障。
name[0] 是一个指向字符串文字 "Dileep" 的字符*。
不,char * name[]
是虚假的。 "Dileep"
是类型为 const char[7]
的字符串文字,并且由于从字符串文字到 char *
的转换,您的代码自 C++11 以来是不允许的。 char * name[]={"Dileep","Avina"};
应该是const char * name[]={"Dileep","Avina"};
.
那么名字[0][1]会是什么?
这应该是const char
.
为什么它会给我运行时错误?
修改字符串文本是 UB。