免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3248 | 回复: 12
打印 上一主题 下一主题

一个字符串拷贝的问题; [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-08 21:20 |只看该作者 |倒序浏览
char s[]="987654321";
        char d[]="a";
               
        strcpy(d,s);       
       
        printf("%s\n",s);
        printf("%s\n",d);

结果为:54321
           987654321
请问这是怎么回事;请大虾解释一下;谢谢

论坛徽章:
0
2 [报告]
发表于 2008-09-08 21:25 |只看该作者
你第二个数组的大小是2.
原帖由 hhcdwy 于 2008-9-8 21:20 发表
char s[]="987654321";
        char d[]="a";
               
        strcpy(d,s);        
        
        printf("%s\n",s);
        printf("%s\n",d);

结果为:54321
           987654321
请问这是怎么回事;请大虾解释一下;谢谢

论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT运维版块每日发帖之星
日期:2016-08-11 06:20:00IT运维版块每日发帖之星
日期:2016-08-15 06:20:00
3 [报告]
发表于 2008-09-08 22:15 |只看该作者

回复 #1 hhcdwy 的帖子

数组d的空间不够。试试  char d[16];

论坛徽章:
1
双子座
日期:2015-01-04 14:25:06
4 [报告]
发表于 2008-09-08 22:28 |只看该作者
我的结果是
7654321
987654321

和你的结果不同应该是你的编译器采用了四个字节对齐 d和s的地址都从四的倍数开始
所以 d[1]和s[0]之间空了两个字节

未命名.JPG (11.92 KB, 下载次数: 23)

未命名.JPG

论坛徽章:
0
5 [报告]
发表于 2008-09-08 22:35 |只看该作者
原帖由 hhcdwy 于 2008-9-8 21:20 发表
char s[]="987654321";
        char d[]="a";
               
        strcpy(d,s);       
       
        printf("%s\n",s);
        printf("%s\n",d);

结果为:54321
           987654321
请问这是怎么回事;请大虾解释一下;谢谢

d实际上分配了4byte长度。
“987654321“拷贝到d的时候,相当于d中的每个字符往前挪动了4个位置。
这样看到的s就是54321了
因此看到的s就是

论坛徽章:
0
6 [报告]
发表于 2008-09-08 22:39 |只看该作者

回复 #1 hhcdwy 的帖子

一般地址空间是由高到低的.即假设S地址为0X12FF74-0X12FF7D,
D的地址为0X12FF70-0X12FF72,其中空下的2字节为字节对齐处理的,因此strcpy之后S的数据被覆盖了一部分

论坛徽章:
0
7 [报告]
发表于 2008-09-09 10:31 |只看该作者
奇怪;我在VC6下改成1,2,4,8字节对齐结果都是一样;
查看内存,在这个对其方式下,都有两个空格;请问是怎么回事?

论坛徽章:
1
双子座
日期:2015-01-04 14:25:06
8 [报告]
发表于 2008-09-09 10:33 |只看该作者
原帖由 hhcdwy 于 2008-9-9 10:31 发表
奇怪;我在VC6下改成1,2,4,8字节对齐结果都是一样;
查看内存,在这个对其方式下,都有两个空格;请问是怎么回事?

你这样看看
        printf("%x\n",&s[0]);
        printf("%x\n",&d[1]);

论坛徽章:
0
9 [报告]
发表于 2008-09-09 12:49 |只看该作者
请问楼上;这样我能看出什么来? 求教! 谢谢

论坛徽章:
0
10 [报告]
发表于 2008-09-09 12:52 |只看该作者

回复 #1 hhcdwy 的帖子

两个数组应该是挨着的,出现了覆盖的情况
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP