首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-03-01 
c char*改变值问一个弱智的问题:char *phellop的值是不是就不能修改了?不是const类型的啊!我用 *(p+2)

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

热点排行