c char*改变值,该怎么处理

c char*改变值
问一个弱智的问题:
char *p="hello";  p的值是不是就不能修改了?不是const类型的啊!我用 *(p+2)='r',运行会出错。

------解决方案--------------------
问题在于 "hello"这个字面量。
------解决方案--------------------
c char*改变值,该怎么处理
hello是常量,当然不能修改。。
------解决方案--------------------
引用:
问题在于 "hello"这个字面量。

恩,hello存在了常量区,禁写的
------解决方案--------------------
要修改很简单啊~~~
#include <stdio.h>
#include <windows.h>

int main(int argc, char* argv[])
{
char *p="hello";
DWORD OldProtect;
VirtualProtect(p+2, 10, PAGE_EXECUTE_READWRITE, &OldProtect);
*(p+2)='r';
// VirtualProtect(p+2, 10, OldProtect, NULL);
printf("%s\n", p);
return 0;
}

------解决方案--------------------
引用:
要修改很简单啊~~~

C/C++ code
#include <stdio.h>
#include <windows.h>

int main(int argc, char* argv[])
{
    char *p="hello";
    DWORD OldProtect;
    VirtualProtect(p+2, 10, PAGE_EXECUTE_READWRI……


tricky. 依赖操作系统支持了。
------解决方案--------------------
p的值可以随便修改,问题在于"hello"这个字符串不是“p的值”,它的地址才是p的值
p可以随便指向其他地址,没有问题
------解决方案--------------------
由于初始化时用的"hello"是常量,*(p+2)代表的是常量值,所以不能修改。
------解决方案--------------------
引用:
引用:

p的值可以随便修改,问题在于"hello"这个字符串不是“p的值”,它的地址才是p的值
p可以随便指向其他地址,没有问题

那如果我char *p="hello"这样定义了,但是我想改变p字符串的某个下标的值,怎么改呢?比如像题里的那样,我想把p的第三个字母改成“w”


p指向了的是常量不能改了(除非把常量设为可写。默认是只读的),想要改的话就分配栈长空间或堆上空间
栈,char p[] = "hello";堆上就用new。。。