用memset设置出现问题?

亚细亚 2009-01-22 10:01:40
执行下面代码正确:

char s[]="abcd";
memset(s,'G',strlen(s));
printf("%s",s);

而执行下面代码出现错误提示:"0x77ba84d5"指令引用的"0x00403000"内存。该内存不能为"written".

char *s="abcd";
memset(s,'G',strlen(s));
printf("%s",s);

请问这是什么原因?
...全文
145 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
亚细亚 2009-01-22
  • 打赏
  • 举报
回复
那修改后的字符传"ee"是在常量区吗?
pauliuyou 2009-01-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 yaxiya 的回复:]
那为什么:
char*s="abcd";
s="ee";
可以修改?
[/Quote]

这个只是修改指针的指向, 并不是修改指针指向的内容
亚细亚 2009-01-22
  • 打赏
  • 举报
回复
那为什么:
char*s="abcd";
s="ee";
可以修改?
xujie0724 2009-01-22
  • 打赏
  • 举报
回复
char* a=“ssss”;这种写法是字符常量定义,无法改变地址里面的内容
叶落寒山 2009-01-22
  • 打赏
  • 举报
回复
codechar*s="abcd"; //字符串常量,不能修改
xiaoyisnail 2009-01-22
  • 打赏
  • 举报
回复
[Quote=引用楼主 yaxiya 的帖子:]
执行下面代码正确:
C/C++ codechars[]="abcd";
memset(s,'G',strlen(s));
printf("%s",s);
而执行下面代码出现错误提示:"0x77ba84d5"指令引用的"0x00403000"内存。该内存不能为"written".
C/C++ codechar*s="abcd";
memset(s,'G',strlen(s));
printf("%s",s);
请问这是什么原因?
[/Quote]

此问果然是周经啊,"abcd"是字符串常量,是在常量存储区的,不能修改
waizqfor 2009-01-22
  • 打赏
  • 举报
回复
[Quote=引用楼主 yaxiya 的帖子:]
执行下面代码正确:

C/C++ code
char s[]="abcd";
memset(s,'G',strlen(s));
printf("%s",s);



而执行下面代码出现错误提示:"0x77ba84d5"指令引用的"0x00403000"内存。该内存不能为"written".

C/C++ code
char *s="abcd";
memset(s,'G',strlen(s));
printf("%s",s);



请问这是什么原因?
[/Quote]
char s[]="abcd";//在栈上分配空间 可改变字符串的值
char *s="abcd";// 定义的是一个常量 存储在常量区 是只读型的 所以不能被修改 或重新赋值 而且你声明是错的 应该const char *s

yellowhwb 2009-01-22
  • 打赏
  • 举报
回复
char *s="abcd";
这样s是指向常量区的,你用memset一个常量区的内存,肯定会报错
xhs_lh04 2009-01-22
  • 打赏
  • 举报
回复
还是老问题,论坛里问过好多次了
第二个是指向常量的指针,指向的是常量区,内容当然不能改了
第一个是分配的临时变量(字符串数组)用常常量对内容做了初始化,但其空间还是在函数的临时变量区,其内容是可以改变,所以可以做 memset
nullah 2009-01-22
  • 打赏
  • 举报
回复
你memset常量存储区的数据肯定会出错
nineforever 2009-01-22
  • 打赏
  • 举报
回复
char *s="abcd";
字符串常量的类型是const char *,为了向下兼容,C++允许你将它赋给char *,但是修改它会导致undefined的行为。
(VC9会将"abcd"放在只读的.rdata里面,修改就会出现你提到的错误)

char s[]="abcd";
字符串常量会被拷贝到栈上,所以没有问题
waizqfor 2009-01-22
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 yaxiya 的回复:]
那修改后的字符传"ee"是在常量区吗?
[/Quote]
当然是在常量区了 因为没有对指针分配空间嘛 要想能修改就malloc之

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧