我必须回答以下代码是否可以编译以及结果是什么:
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|
最佳答案
C 中的文字字符串实际上是只读字符数组,并且不能(也不应该)修改。
尝试修改字符串文字的内容会导致 undefined behavior .
当有指向字符串文字的指针时,始终养成使用 const char *
的习惯。
关于C 指针算术困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54517759/