首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

哪位高手能解释这个程序

2012-10-23 
谁能解释这个程序?void lianjie(){char s1[100],s2[100]int i0,j0printf(输入第一个字符串(不要多于1

谁能解释这个程序?
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 */}
[解决办法]
探讨

第2个while只有循环条件,没有循环体。这样也可以啊?

[解决办法]
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'.就知道这段代码的意思了。

热点排行