当前位置: 代码迷 >> C语言 >> [求助]关于strcpy函数的疑问
  详细解决方案

[求助]关于strcpy函数的疑问

热度:417   发布时间:2006-11-26 13:24:29.0
[求助]关于strcpy函数的疑问

有人问我:
strcpy(str2+strlen(str2),str1);
什么意思?
我回答:
strcpy()这个函数的前两个参数其实是指针类型,例中的str2,str1,都是数组名,也就是指针,指向该数组元素的首地址。strlen()函数的返回值是整数,字符串指针加上一个整数i,就使指针指向该字符串中第i个字符。strcpy(str2+strlen(str2),str1);的意思就是在str2+srelen(str2)的位置开始复制str1。

结果却不对.
#include"stdio.h"
#include"string.h"

main()
{
char str1[]="girls";
char str2[]="hello boys";
printf("\n\n%s",strcpy(str2+strlen(str1),str1));

}

结果只输出:girls

怎么回事呢??我分析错了么??

搜索更多相关的解决方案: strcpy  函数  疑问  指针  

----------------解决方案--------------------------------------------------------

#include"stdio.h"
#include"string.h"

main()
{
char str1[]="girls";
char str2[50]="hello boys ";
strcpy(str2+strlen(str2),str1);
printf("\n\n%s",str2);

}
你的分析是没错,但是写的时候写错了,错误有两个,还有一个估计是不小心吧~~把strlen(str2)写成了strlen(str1).
两个错误一个是str2因为长度没写,默认的是初始化字符串的长度,也就是"hello boys ";的长度~~后面的strcpy以后,数组就越界了.
还有个错误,你把strcpy放在了printf里面了,放出来就好了,至于放里面为什么会输出girls,可能是copy的时候指针指向的是str1,并从中取值,整个%s也就是从str1开始了,所以输出的是str1.


----------------解决方案--------------------------------------------------------

恩,先谢了!

char * my_strcpy(char * dst, const char * src)
{
char * cp = dst;
while( *cp++ = *src++ ) ;
return( dst );

}

这是我找的strcpy函数源代码,它返回的是dst呀,在printf里就相当于输出dst,怎么会输出scr呢??


----------------解决方案--------------------------------------------------------
以下是引用达不留在2006-11-26 14:23:04的发言:

恩,先谢了!

char * my_strcpy(char * dst, const char * src)
{
char * cp = dst;
while( *cp++ = *src++ ) ;
return( dst );

}

这是我找的strcpy函数源代码,它返回的是dst呀,在printf里就相当于输出dst,怎么会输出scr呢??

因为strcpy(str2+strlen(str2),str1);
返回的是str2+strlen(str2),而不是str2


----------------解决方案--------------------------------------------------------
恍然大悟啊!!!!

明白了.谢谢各位!!


(我竟然忘了参数是str2+strlen(str2),而不是str2.犯了这样低级的错误,不该啊!!)
----------------解决方案--------------------------------------------------------
  相关解决方案