char *name= "tony";
name[2] = 'z';
printf("%s",name);
为什么这会给我一个总线错误10?这是什么意思? 这本书告诉我它因为" tony"字符串文字保存在只读存储器中,你无法改变它,但我不明白,因为我可以做这样的事情..
char *name= "tony";
name = "another";
printf("%s",name);
在这种情况下,我只是更改了只读内存,它工作正常。 谢谢指针让我头疼
答案 0 :(得分:2)
char *name= "tony";
name = "another";
printf("%s",name);
在这种情况下,您没有更改只读内存中的数据。您刚刚将name
指针指向另一个只读内存(其中"另一个"存储)。
char *name= "tony";
name[2] = 'z';
printf("%s",name);
在这种情况下,您实际上正在编辑存储在只读存储器中的数据。
答案 1 :(得分:2)
char *name= "tony";
字符串文字"tony"
在只读内存中。它是一个常量。你无法修改它。这意味着你不能这样做 -
name[0]='a'; // this should not be done
OTOH -
char *name= "tony";
name = "another"; // no problem will execute correctly
您只需更改指针name
指向的位置。这是有效的,因为指针不是常量。
因此,您无法修改文字,但可以更改指针name
指向的内容。
好吧,如果你这样声明 -
char name[]="tony";
name[2] = 'z'; // completely valid
printf("%s",name);