C中的总线错误10:字符串文字

时间:2015-09-19 06:01:50

标签: c

有人可以解释原因吗

 char *s1 = "abcd";
 char *s2 = s1;
 s1[0] = "z";
 s1[2] = "\0";

给我一​​个总线错误10 BUT

 char s1[] = "abcd";
 char *s2 = s1;
 s1[0] = "z";
 s1[2] = "\0";

是char * s1和char s1 []不相等?请解释一下,谢谢。

1 个答案:

答案 0 :(得分:1)

自由(历史上的懒惰),明智!指针不是数组!教程骗了你!

在第一个示例中,您将指针修改为常量字符串文字,以及该未定义的行为。那么一切都会发生!

同时,在第二种情况下,字符串本身存储在内部,而数组本身在堆栈中是 。因此,第二个例子暴露的不仅仅是一个可以修改的普通无辜数组。

s2指针在这一切方面没有任何区别。恕我直言,第一个案例是可编辑的事实只是历史上的懒惰,否则称为向后兼容性

BTW :您是否将字符串文字分配给char s?这也是未定义的行为!