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

strcat 里的 while( *cp++ = *src++ ) ; 不理解啊解决方法

2013-07-21 
strcat 里的 while( *cp++ *src++ ) 不理解啊在Microsoft Visual Studio 8\VC\crt\src 目录下有个strc

strcat 里的 while( *cp++ = *src++ ) ; 不理解啊

在Microsoft Visual Studio 8\VC\crt\src 目录下有个strcat.c的文件:

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( *cp++ = *src++ ) ; 会将 src 的最后一个‘\0’ 复制到 dst 里, 为什么啊?
比如 int a[100]= "1234"; int b[] = "ABCD"; strcat(a, b);
我的理解:
参考上面第二个while 循环, 当 src 指向 'D'时, src++ 先取值再自加, 判断 *src != 0 , 然后复制给*cp, cp再自加; scr 指向 0, src++ 取值再自加,  取的值为0,退出 while循环, 没有给dst 赋0啊。

[解决办法]
while( *cp++ = *src++ ) ; 这个不是判断  *src != 0, 而是判断 (*cp++ = *src++) != 0
是已经赋值后再判断, 不是判断在赋值.
[解决办法]
等价于

while(*cp)
{
   *cp = *src;
   cp++;
   src++;
}

热点排行