有人问我:
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
怎么回事呢??我分析错了么??
----------------解决方案--------------------------------------------------------
#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呢??
----------------解决方案--------------------------------------------------------
恩,先谢了!
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.犯了这样低级的错误,不该啊!!)
----------------解决方案--------------------------------------------------------