char * 左值问题

antsmoving 2009-08-11 09:25:24
如下代码

char ch = 'a';
char *cp = &ch;
cp = "abc";
printf("%s \n", cp);

*(cp+1) = 'P'; // key
printf("%c \n", *cp);



书上说 *(cp+1)可以用作左值, 但调试出现访问冲突,为何 ? 谢谢
...全文
107 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
antsmoving 2009-08-11
  • 打赏
  • 举报
回复
明白了 谢谢
baihacker 2009-08-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 leontown 的回复:]
那,单字符类型是常量吗?
例如,
char ch = 'a';
char *cp = &ch;
*cp = 'T';
能够运行。
貌似字符类型,不是常量。
引用 2 楼 baihacker 的回复:
在一般情况下"abc"是放在只读内存中的...一修改就报错.

[/Quote]
你指向的是ch这个变量,这个变量用常量'a'初始化的。
LeonTown 2009-08-11
  • 打赏
  • 举报
回复
那,单字符类型是常量吗?
例如,
char ch = 'a';
char *cp = &ch;
*cp = 'T';
能够运行。
貌似字符类型,不是常量。
[Quote=引用 2 楼 baihacker 的回复:]
在一般情况下"abc"是放在只读内存中的...一修改就报错.
[/Quote]
baihacker 2009-08-11
  • 打赏
  • 举报
回复
char cp[] = "123";
cp[1] = 'x';
antsmoving 2009-08-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 baihacker 的回复:]
是左值并不代码你可以修改啊...
C中去修改一个string literal是未定义行为.
[/Quote]

那麻烦下,举个例能改的
liate1 2009-08-11
  • 打赏
  • 举报
回复
学习了。
nwpulei 2009-08-11
  • 打赏
  • 举报
回复
cp 指向了静态的字符数组“abc”,“abc”是不能改变的。所以 *(cp+1) = 'P'; 报错。
baihacker 2009-08-11
  • 打赏
  • 举报
回复
在一般情况下"abc"是放在只读内存中的...一修改就报错.
baihacker 2009-08-11
  • 打赏
  • 举报
回复
是左值并不代码你可以修改啊...
C中去修改一个string literal是未定义行为.

69,382

社区成员

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

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