c++ - 改变字符指针的值

标签 c++ pointers string-literals

为什么上面的方法有效?

char*p = new char[4];
p = "hey";
p = "jey";

但这不是吗?

char* p = new char[4];
p = "hey";
p[0] = 'j';

第二个示例导致段错误。

在第一个例子中,“jey”是否覆盖了“hey”

最佳答案

"hey""jey" 等字符串文字是常量,您无法修改。

声明

p = "hey";
p = "jey";

使p 指向指定字符串的第一个元素。虽然语言允许这样做,但您丢失了从 new 获得的指针信息,现在出现了内存泄漏。

您在第二个示例中遇到了同样的问题,但是当您尝试修改字符串文字时出现了段错误

p[0] = 'j';

假设 “hey” 存储在地址为 0x010x020x03 的一些只读存储器中对于三个字符,p 指向 0x01。执行 p[0] = 'j' 您试图更改地址 0x01 中存储的值,但由于它是只读内存,您会遇到段错误。

关于c++ - 改变字符指针的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48762875/

相关文章:

c++ - 如何将字符转换为整数

c - 通过将指针整数与 sizeof(int) 相乘来使用 realloc 不起作用

c - 如何定义指向结构的指针

python - python 中的\newline 转义序列是什么意思?

objective-c - 这两种创建 NSString 的方式有什么区别?

python - numpy 数组和返回上的 str() 方法

c++ - 在 C++ 中以状态作为参数传递 Functor

c++ - 类模板 C++ 中的虚方法模板

c++ - 从文本文件中删除交易子集的 c 源代码

python - 如何通过 pybind11 在 Python 中访问 C/C++ 数组