读书人

一个关于strcpy的奇怪有关问题

发布时间: 2012-03-06 20:47:55 作者: rapoo

一个关于strcpy的奇怪问题。
char * strcpy( char *strDest, const char *strSrc )
{
 assert( (strDest != NULL) && (strSrc != NULL) );
char *address = strDest;
 while( (*strDest++ = * strSrc++) != ‘\0’ );
return address;
}

我查了很多书上都说这个函数实现字符串拷贝是对的,可是我调试的时候发现,确实能实现拷贝,但是为什么传进去的指针 strSrc在strSrc里面改变了后,主调用函数里面打印出来的结果还是原来的结果,比如我给strSrc赋值为Hello,经过这个函数之后,strSrc的值应该变了才对啊,因为指针偏移了啊,开始我怀疑是const缘故,于是把const去掉,结果还是和不去是一样的,奇怪了,以前不是都是通过传指针来改变实参的值的吗?如果这个函数是对的,那我要通过传递指针来改变一个字符串的值不就实现不了吗? 晕ing。。我都被弄糊涂了,望高手指点一下。

[解决办法]
函数参数为指针的,在函数里能改变的只是指针指向的内容,比如在这个函数里,strDest里的内容就被改变了。 当然strSrc 里的内容是不能改变的,因为它前面有一个const修饰

如果你想让函数改变指针本身,就要把指针变量本身的地址传递给函数,也就是指针的指针

比如:
void Fun(char** p)
{
*p = 0;
}


[解决办法]
在调用strcpy(ls,rs)时,实际上是将strDest = ls,strSrc = rs,在strcpy中移动的是strSrc,strSrc的指向是改变了,但它作用域仅限于strSrc中,rs的指向并没有改变

读书人网 >C++

热点推荐