首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-03-06 
一个关于strcpy的奇怪问题。char*strcpy(char*strDest,constchar*strSrc){ assert((strDest!NULL)&&(strSr

一个关于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的指向并没有改变

热点排行