我必须回答以下代码是否编译以及结果是什么:
char *s1 = "A String";
char *s2 = "Other String";
*s1 = *s2;
当你做这样的声明时,我并没有真正发现后台会发生什么。s1 指向内存是这样的吗?
|A| |S|t|r|i|n|g| |
在我的理解中*s1 = *s2
和s1[0] = s2[0]
一样,对吧?那么为什么会出现内存错误呢?不应该吗?
|O| |S|t|r|i|n|g| |
C 中的文字字符串实际上是只读字符数组,可以(也不应该(修改。
尝试修改字符串文本的内容会导致未定义的行为。
在具有指向字符串文本的指针时,始终养成使用const char *
的习惯。