谁能解释这个程序?
void lianjie()
{
char s1[100],s2[100];
int i=0,j=0;
printf("输入第一个字符串(不要多于100个字符)\n");
scanf("%s",s1);
printf("输入第二个字符串(不要多于100个字符)\n");
scanf("%s",s2);
while(s1[i]!='\0') i++;
while((s1[i++]=s2[j++])!='\0');
printf("连接后的字符串 %s\n",s1);
getch();
}
这个函数是连接两个字符串的,但是我看不懂!
谁帮我解释下这两个while,要详细点,我理解力差。
在线等啊!
[解决办法]
第一个while计算s1的长度,字符串是\0结尾的
第二个while从s1的尾部开始连接s2
这是VC的strcat函数的实现,基本一样
- C/C++ code
char * __cdecl strcat ( char * dst, const char * src ){ char * cp = dst; while( *cp ) cp++; /* find end of dst */ while( *cp++ = *src++ ) ; /* Copy src to end of dst */ return( dst ); /* return dst */}
[解决办法]
如果这么个简单的程序楼主都理解困难的话,楼主可能需要多读几遍教材。
第一个while寻找'\0',找到后第二个while逐字符复制,知道遇到'\0'为止。
VC6的CRT有一个很好的实现供你参考:
STRCAT.C:
- C/C++ code
char * __cdecl strcat ( char * dst, const char * src ){ char * cp = dst; while( *cp ) cp++; /* find end of dst */ while( *cp++ = *src++ ) ; /* Copy src to end of dst */ return( dst ); /* return dst */}
[解决办法]
[解决办法]
- C/C++ code
(1)while(s1[i]!='\0') i++;//这个是在s1找到'\0'的位置(2)while((s1[i++]=s2[j++])!='\0');//在(1)找到了'\0'的位置处,从s2首地址开始,读出数据放到//s1中,直到s2读出的是'\0',就结束!//完成连接
[解决办法]
单步调试和设断点调试是程序员必须掌握的技能之一。
[解决办法]
while( (s1[i++]=s2[j++]) !='\0');
仔细看看就明白
[解决办法]
这个问题没有那么困难,楼主最好是加断点,依次执行一遍。这样对你学习有帮助
[解决办法]
其实LZ只要知道通过标准输入的字符串的结束标志位是'\0'.就知道这段代码的意思了。