C指针算术混乱

时间:2019-02-04 13:59:40

标签: c string pointers

我必须回答以下代码是否编译以及结果如何:

char *s1 = "A String";
char *s2 = "Other String";
*s1 = *s2;

当您执行这样的声明时,我并没有真正发现后台会发生什么。 s1指向内存看起来像这样吗:

|A| |S|t|r|i|n|g|\0|

据我了解,*s1 = *s2s1[0] = s2[0]一样,对吗? 那么为什么会出现内存错误? 不应该吗?:

|O| |S|t|r|i|n|g|\0|

1 个答案:

答案 0 :(得分:1)

C语言中的文字字符串实际上是只读个字符数组,并且可以(并且不应)对其进行修改。

尝试修改字符串文字的内容将导致undefined behavior

在拥有指向字符串文字的指针时,总是养成使用const char *的习惯。