strcat 里的 while( *cp++ = *src++ ) ; 不理解啊解决方法
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++;
}