我必须回答以下代码是否编译以及结果如何:
char *s1 = "A String";
char *s2 = "Other String";
*s1 = *s2;
当您执行这样的声明时,我并没有真正发现后台会发生什么。 s1指向内存看起来像这样吗:
|A| |S|t|r|i|n|g|\0|
据我了解,*s1 = *s2
与s1[0] = s2[0]
一样,对吗?
那么为什么会出现内存错误?
不应该吗?:
|O| |S|t|r|i|n|g|\0|
答案 0 :(得分:1)
C语言中的文字字符串实际上是只读个字符数组,并且可以(并且不应)对其进行修改。
尝试修改字符串文字的内容将导致undefined behavior。
在拥有指向字符串文字的指针时,总是养成使用const char *
的习惯。