为了账号安全,请及时绑定邮箱和手机立即绑定

while(*s++); 和 while(*s)s++; 的区别?

while(*s++); 和 while(*s)s++; 的区别?

慕无忌1623718 2019-04-23 15:18:44
《C程序设计语言》第二版的习题5.1:用指针的方式实现strcat即字符串连接函数。这个是可以实现的#includevoidstrcatp(char*s,char*t);intmain(){ chars[]="Hello"; chart[]="world!"; strcatp(s,t);printf(s); return0;}voidstrcatp(char*s,char*t){while(*s)s++;while(*s++=*t++) ;}输出结果为Helloworld!而这种却不行?#includevoidstrcatp(char*s,char*t);intmain(){ chars[]="Hello"; chart[]="world!"; strcatp(s,t);printf(s); return0;}voidstrcatp(char*s,char*t){while(*s++);while(*s++=*t++) ;}输出结果:Hello
查看完整描述

2 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

关键的错误是while(*s)
s++;在s指向\0时候停止增加指针。
而while(*s++)
;在指向\0时候仍为指针增加了1。从而使得两段拼接的字符串中间存在\0,printf在这个中间点认为字符串已经结束。
                            
查看完整回答
反对 回复 2019-04-23
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

while(*s++);等于while(true){charc=*s;s++;if(!c)break;}而while(*s)s++;等于while(true){charc=*s;if(!c)break;s++;}
                            
查看完整回答
反对 回复 2019-04-23
  • 2 回答
  • 0 关注
  • 444 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信