两个字符串连接起来,不要用strcat 有段代码不是很明。解决方案

两个字符串连接起来,不要用strcat 有段代码不是很明。。。。
#include <stdio.h>
void   main()
{
char   s1[80],s2[40];
int   i=0,j=0;
printf( "\ninput   string1: ");
scanf( "%s ",s1);
printf( "input   string2: ");
scanf( "%s ",s2);
while(s1[i]!= '\0 ')
i++;
while(s2[j]!= '\0 ')
s1[i++]=s2[j++];
s1[i]= '\0 ';
printf( "The   new   sting   is:%s\n ",s1);
}

就是这段:
while(s1[i]!= '\0 ')
i++;
while(s2[j]!= '\0 ')
s1[i++]=s2[j++];
s1[i]= '\0 ';
printf( "The   new   sting   is:%s\n ",s1);
}
什么意思呢、?。。看不懂。。。。

------解决方案--------------------
while(s1[i]!= '\0 ')
i++;

从s1的首地址处开始,向后遍历,直到s1的结尾处,也就是\0处


while(s2[j]!= '\0 ')
s1[i++]=s2[j++];

从s1的结尾处(\0)开始将s2接在s1的后面,直到s2的结尾


s1[i]= '\0 ';

为接好后的s1,也就是s1+s2的结尾赋上结束标志\0
printf( "The new sting is:%s\n ",s1);
}

------解决方案--------------------
while(s1[i]!= '\0 ')
i++; //i 累加到 s1 的末尾
while(s2[j]!= '\0 ')
s1[i++]=s2[j++]; //将 s2 中的字符通过循环连接到 s1 中
s1[i]= '\0 '; //补充上一个 \0 字符串结束字符