[讨论]strcpy的写法?这样也可以
strcpy的写法是面试中的一个经典考题,今天看了下发现这样的写法也是对的
#include "stdafx.h "
char* str_cpy(char* str1,char* str2)
{
str1=str2;
return str1;
}
int main(int argc, char* argv[])
{
char a[4]= "abc ";
char b[5]= "efgh ";
printf( "%s ",str_cpy(a, "bcdsdv "));
printf( "%s ",str_cpy(a,b));
return 0;
}
既然这样也可以,为什么标准答案却是:
char * strcpy(char * strDest,const char * strSrc)
{
if ((strDest==NULL)||(strSrc==NULL)) //[1]
throw "Invalid argument(s) "; //[2]
char * strDestCopy=strDest; //[3]
while ((*strDest++=*strSrc++)!= '\0 '); //[4]
return strDestCopy;
}
大家讨论下
[解决办法]
str1=str2;
是把地址赋过去,即str1和str2指向同一块地址.
有几个后果:
1.str1改变时,str2同时也在改变
2.删除其中一个时,另一个为野指针
3.对两个都删除时,会引起异常
[解决办法]
对于上面的,小弟不才也想说两句,其实如果在函数里面变化,没有变化,原因很简单,只是在函数自己的栈空间从新申请了2个指针,而这两个指针没有复制到原函数的地址,虽然是原函数的地址,但是COPY的.所以没有用,如果你传指针的地址,然后间接引用就可以了.也可以这样写.
楼主也许对指针的间接引用还没有完全明白吧..呵呵.