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

《C程序设计语言》第二版的习题5.1:用指针的方式实现strcat即字符串连接函数。这个是可以实现的#include
voidstrcatp(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!而这种却不行?#include
voidstrcatp(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
慕无忌1623718
浏览 445回答 2
2回答

慕工程0101907

关键的错误是while(*s)s++;在s指向\0时候停止增加指针。而while(*s++);在指向\0时候仍为指针增加了1。从而使得两段拼接的字符串中间存在\0,printf在这个中间点认为字符串已经结束。

叮当猫咪

while(*s++);等于while(true){charc=*s;s++;if(!c)break;}而while(*s)s++;等于while(true){charc=*s;if(!c)break;s++;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript