有人可以解释原因吗
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 []不相等?请解释一下,谢谢。
答案 0 :(得分:1)
在第一个示例中,您将指针修改为常量字符串文字,以及该未定义的行为。那么一切都会发生!
同时,在第二种情况下,字符串本身存储在内部,而数组本身在堆栈中是 。因此,第二个例子暴露的不仅仅是一个可以修改的普通无辜数组。
s2
指针在这一切方面没有任何区别。恕我直言,第一个案例是可编辑的事实只是历史上的懒惰,否则称为向后兼容性。
BTW :您是否将字符串文字分配给char
s?这也是未定义的行为!