关于strcpy字符串拷贝 的函数的问题。

大家好,我对指针这理解还不是很熟悉,所以有些疑惑,请大家给我分析这个代码
这是将str2拷贝给str1的函数(是正确的),但我有点搞不懂为什么这里要借助一个临时指针呢,而像我下面那个我想不借助临时指针直接赋值的错误程序那样为什么就不能得到结果呢?
char *str_cpy(char *str1,char *str2){
char *temp=str1;
while(*str2!='\0')
{
*temp++ = *str2++;
}
*temp='\0'; //这个有什么用?好像我删除掉也没影响
return str1;
}

错误代码:
char *str_cpy(char *str1,char *str2){
while(*str2!='\0')
{
*str1++ = *str2++;
}
return str1;
}

求指教。。。
string 类型以\0结尾我知道,我但我把它去掉返回的仍然是一样的。
不借助临时指针我那代码肯定是指针指错了那样我知道,那怎么改呢?

第1个回答  2011-03-09
就原来的str_cpy函数来说,这个函数是没有错误的,只是这个返回值的用途,看你怎么用了,如果返回送给函数的形参str1原来的值,就要用temp了(个人感觉这种用法是多余的,不过标准库里也是这么做的),如果要返回已复制的字符串的结尾,大可不用temp,直接改str1就可以了,而且有种奇妙的效果:
char buf[256];
str_cpy(str_cpy(buf,"abc"),"def");
运行后buf的值为"abcdef“了

使用*temp = '\0'是必须的,你删除了没影响是因为好运(我估计传入函数的str1指向的是静态变量,被系统初始化为全0了,并不是每次都这么好运的。
第2个回答  2011-03-08
此处必须用一个temp.
char *str_cpy(char *str1,char *str2){
char *temp=str1; //temp指向str1的第一个字母
while(*str2!='\0')
{
*temp++ = *str2++; //temp后移
}
*temp='\0'; //temp最后加个“\0” ,表示结束
return str1; //str1还是原来的str1,只是被str2覆盖了
}

错误代码:
char *str_cpy(char *str1,char *str2){ //没用temp
while(*str2!='\0')
{
*str1++ = *str2++; //str1后移
}
return str1; //str1指向字符串的结尾,必然出错
}本回答被提问者采纳
第3个回答  2011-03-08
确实不需要借助临时指针,但是*temp='\0';却是必要的,因为字符串的结尾是用一个'\0'做标志的。
相似回答