如下是字符串连接函数,我对while(*a)和while(*b)不是很明白,求解释

#include <stdio.h>

void strcat(char *,char *);

main()
{
char s1[80];
char s2[80];

scanf("%s %s",s1,s2);

printf("%s\t%s\n",s1,s2);
strcat(s1,s2);
printf("%s",s1);
getch();
}

void strcat(char *a,char *b)
{

while(*a)
a++;
while(*b)
*a++=*b++;
}
我只知道是空串,NULL时跳出循环。。但是当我换成while(*a!=‘\0’)时就得不到正确结果了。。希望高手们可以给我解释一下。

芜湖不芜
浏览 56回答 2
2回答

千巷猫影

你的这个函数有问题, 而不是while怎么判断的问题void strcat(char *a,char *b){while(*a != '\0')a++;while(*b != '\0')*a++=*b++;*a = '\0'; //后面应该加上'\0',不然你的字符串怎么结束, 这里加了怎么while都没有问题}

Helenr

while可以用作无穷循环,很多地方都用到无穷循环。一个无穷循环如下所示:while(true){&nbsp;&nbsp;循环内容;&nbsp;&nbsp;...}无穷循环可以由自己循环中的某个条件式来结束。下面是一个循环内部终止的例子:while(true) { 语句; if(条件式) break; // 跳离循环 ... }当条件式成立时,会执行break离开while循环,这个break与switch中的作用是一样的,都是要离开当时执行的程序块时使用。class&nbsp;TestWhile{&nbsp;public static void&nbsp;main(String[] args)&nbsp;{while(true){&nbsp;System.out.println( "执行&nbsp;");&nbsp;//值为真用break跳出执行while之后的语句if(true){&nbsp;break;&nbsp;}System.out.println( "继续执行 ");&nbsp;}}}//无穷循环固定格式为while(true),其中括号里的值固定为boolean型,并且要为真时,才会执行下面的语句.class&nbsp;TestWhile{&nbsp;public static&nbsp;void main(String[] args)&nbsp;{boolean flag =&nbsp;false;while(flag)&nbsp;&nbsp;//这时括号里的值为假,所以下面的语句都不会执行.如果改成while(!flag)就可以执行了.{&nbsp;System.out.println( "while为真时执行 ");//值为真用break跳出执行while之后的语句if(true)&nbsp;{&nbsp;break;&nbsp;}System.out.println( "继续执行&nbsp;");&nbsp;}}}
打开App,查看更多内容
随时随地看视频慕课网APP