| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 756 人关注过本帖
标题:[求助]关于strcpy函数的疑问
只看楼主 加入收藏
达不留
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2006-11-3
收藏
 问题点数:0 回复次数:4 
[求助]关于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 函数 疑问 指针 
2006-11-26 13:24
剑风曲
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2006-11-16
收藏
得分:0 

#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.

2006-11-26 13:36
达不留
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2006-11-3
收藏
得分:0 

恩,先谢了!

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
我不是郭靖
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:494
专家分:6
注 册:2006-10-4
收藏
得分:0 
以下是引用达不留在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


2006-11-26 14:41
达不留
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2006-11-3
收藏
得分:0 
恍然大悟啊!!!!

明白了.谢谢各位!!


(我竟然忘了参数是str2+strlen(str2),而不是str2.犯了这样低级的错误,不该啊!!)
2006-11-26 14:47
快速回复:[求助]关于strcpy函数的疑问
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.049502 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved