| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 591 人关注过本帖, 1 人收藏
标题:strcpy这个函数
只看楼主 加入收藏
wbw626
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2013-6-16
结帖率:87.5%
收藏(1)
已结贴  问题点数:5 回复次数:9 
strcpy这个函数
上网找的资料说明char *s1,char *s2,strcpy是吧在s2中的字符拷贝的s1中,
但我理解的不是很透,
比如
int main()
{
 char c[] = "spam";
strcpy(c + 3, c);
printf("%s",c);
}
这个的输出是spaspas,
如果换成c+2,输出是spspsm
c+1的话编程了sssam,
最后c+4的话居然停止工作了,我具体不知道这个函数怎么运作的,只告诉拷贝太笼统了,希望明白的人教教我。
谢谢!!
搜索更多相关主题的帖子: 资料 
2013-07-16 09:55
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
空间要足够大  数组不能越界

DO IT YOURSELF !
2013-07-16 09:58
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
c 库中的 strcpy();的实现好像是这样的
while ((*dst++= *src++) != 0);

等价于
 while (*src != 0)
 {
  *dst= *src;
   dst++;
  src++;
 }

如果你理解这个逻辑,就知道为什么输出的结果是那样了



我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-07-16 10:07
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:0 
上面原理给了,现在的情况就是数组对自身的数组进行赋值,所以你模拟下就应该懂了,*dst= *src;二者是一样了

Maybe
2013-07-16 12:04
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
我用VS2012来运行,结果好搞笑,怎么回事
程序代码:
#include<stdio.h>
#include<string.h>
int main() 

{
char c[] = "spam";
strcpy(c+3, c);
printf("%s",c);
return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册


思考赐予新生,时间在于定义
2013-07-16 12:17
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
回复 5楼 love云彩
如果你理解了就不觉得搞笑了。

字符串低段拷贝到高段,当然是这样

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-07-16 13:16
浪漫横行
Rank: 4
等 级:业余侠客
威 望:1
帖 子:127
专家分:291
注 册:2013-4-30
收藏
得分:0 
s1,s2为字符串,strcpy(s1,s2)相当与把s2内的字符串拷贝给s1,注意s1的空间比s2大。即char s1[m],s2[n];m一定比n大。。
2013-07-17 14:26
浮华灬若梦
Rank: 1
等 级:新手上路
帖 子:8
专家分:2
注 册:2013-5-29
收藏
得分:0 
回复 楼主 wbw626
s1要比s2的空间大,拷贝实际上就是s2把s1覆盖了。
2013-07-17 16:43
XiaoXiao_Ren
Rank: 3Rank: 3
来 自:西安
等 级:论坛游侠
威 望:1
帖 子:80
专家分:198
注 册:2013-7-17
收藏
得分:0 
回复 3楼 yuccn
是不等于 ‘\0’ 字符串结束标志

[ 本帖最后由 XiaoXiao_Ren 于 2013-7-17 17:34 编辑 ]

否极泰来
2013-07-17 17:33
专家不是砖家
Rank: 2
等 级:论坛游民
帖 子:4
专家分:15
注 册:2013-6-30
收藏
得分:5 
char c[] = "spam";
 strcpy(c + 3, c);
 printf("%s",c);
 }
 这个的输出是spaspas,
 如果换成c+2,输出是spspsm
 c+1的话编程了sssam,
 最后c+4的话居然停止工作了

c+3 指的是"spam"里面的'm',把"spam"复制到'm'的位置。。"spam"里面的 'm'就被覆盖了。一般要指定大小的,s1要比s2的空间大。。。。
2013-07-17 23:09
快速回复:strcpy这个函数
数据加载中...
 
   



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

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