得到"总线错误10"错误信息?

时间:2015-10-18 10:33:49

标签: c pointers

  char *name= "tony";
  name[2] = 'z';
  printf("%s",name);

为什么这会给我一个总线错误10?这是什么意思? 这本书告诉我它因为" tony"字符串文字保存在只读存储器中,你无法改变它,但我不明白,因为我可以做这样的事情..

  char *name= "tony";
  name = "another";
  printf("%s",name);

在这种情况下,我只是更改了只读内存,它工作正常。 谢谢指针让我头疼

2 个答案:

答案 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);