C 指针算术困惑

标签 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|

最佳答案

C 中的文字字符串实际上是只读字符数组,并且不能(也不应该)修改。

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

当有指向字符串文字的指针时,始终养成使用 const char * 的习惯。

关于C 指针算术困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54517759/

相关文章:

C - strcmp() 未正常运行

c++ - 如何在C++中更改字符串中的字符

c - 尝试将指针索引到函数中的指针时出现段错误

c++ - 支持单个位偏移的类似“memcpy”的函数?

c - 在 C 中打印数组的所有独特组合...我认为非常接近

c - 在 eclipse (Fedora) 上的 c 程序中未定义对 pthread_create 的引用

c++ - 我可以在不调用未定义行为的情况下存储指向不存在数据的指针吗?

c - 某些 strtok 调用出现段错误

java Swing : Is it possible change color of a specific string variable?

c - 全局变量数组指针C编程