在strcpy中一句while语句while( (*strDest++ = * strSrc++) != ‘\0’ ) 不明白
全部代码是
char *strcpy(char *strDest, const char *strSrc);
{
assert((strDest!=NULL) && (strSrc !=NULL));
char *address = strDest;
while( (*strDest++ = * strSrc++) != ‘\0’ )
NULL ;
return address ;
}
这条语句是先用strSrc覆盖的内容给strDest指向的空间再检测*strDest是不是‘/0’
可是如果strDest比strSrc短比如
strDest-> 123456/0****
strSrc -> 1234567/0****(*为别的空间)
执行语句后strDest指向内容变为
1234567/0那有一个*的空间不是被清除了吗?
这样做不危险吗?
参考答案:不会。
strDest初始值为NULL,根本没有内容,它的作用是接受strSrc中的内容
=============================
可是如果strDest比strSrc短
=============================
这句话说错了。strDest初始长度为0,根本没有东西。它只是用来装strSrc的
strSrc有多大,它就可以有多大,长度任意(不超过系统规定长度就可以)
补充:一般在strcpy之前会使用memset将源数组(如果它是数组)置空,否则就比较危险。它是事实上的标准。
如果是指针可以写上:strDest=NULL;
*********************************************************
你只要把它定义成指针就好,不用管它大小strDest++可以帮你指到下一个地址。你那个while语句没有问题的,*strDest++ = * strSrc++;是非常经典常用的语句。