关于 while(*p2++ = *p1++)

cwbcwb505 2010-11-09 09:59:12
Main()
{
char *p1=“name”;
char *p2;
p2=(char*)malloc(20);
memset (p2, 0, 20);
while(*p2++ = *p1++);
printf(“%sn”,p2);
}

请问上面代码会输出什么?为什么?

...全文
245 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
永远的霸者 2010-11-09
  • 打赏
  • 举报
回复
此时指针p2指向string"name" 后面的“\0” 输出的是“\0”。
awsqsh 2010-11-09
  • 打赏
  • 举报
回复
每天一顶。。。建议重写代码,,感觉好乱
無_1024 2010-11-09
  • 打赏
  • 举报
回复
当p2为'\n'时终止
hjs1122 2010-11-09
  • 打赏
  • 举报
回复
while(*p2++ = *p1++);
printf(“%s\n”,p2);
你是想完成:将p1指向的内存复制给p2指向的内存

但是你的p2指针已经改变了,输出它你又有什么意思啦!
可以这么改:
char *p3 = p2;
while(*p3++ = *p1++);
printf("%s\n", p2);
luciferisnotsatan 2010-11-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lthyxy 的回复:]

printf(“%sn”,p2); 遇‘\0’就停止输出。
[/Quote]
+1
太乙 2010-11-09
  • 打赏
  • 举报
回复
while(*p2++ = *p1++); 将p1指向的内存复制给p2指向的内存。。。

相当于:

do

{

*p2 = *p1;
p1++;
p2++;
}while (*p2 != '\0')
liutengfeigo 2010-11-09
  • 打赏
  • 举报
回复
printf(“%sn”,p2); 遇‘\0’就停止输出。
hhh_hao 2010-11-09
  • 打赏
  • 举报
回复
哪有人会写这样的代码

69,371

社区成员

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

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