读书人

strcat 里的 while( *cp++ = *src++ )

发布时间: 2013-07-21 21:55:43 作者: rapoo

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++;
}

读书人网 >C语言

热点推荐