| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1737 人关注过本帖
标题:出一小题,考下内存堆栈
只看楼主 加入收藏
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
结帖率:100%
收藏
 问题点数:0 回复次数:27 
出一小题,考下内存堆栈
程序代码:
#include<stdio.h>
#include<malloc.h>
#include<string.h>
int main()
{
    char d[]="456789";
    char s[]="123";
    strcpy(s,d);
    printf("%s\n%s\n",d,s);
    return 0;
}


不用编译器,写出这段代码的输出。
搜索更多相关主题的帖子: 堆栈 内存 
2010-12-18 15:13
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:0 
我感觉答案是:
89
456789

愿用余生致力编程
2010-12-18 15:22
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
就从你在之前那个帖子里面贴的内容,我读定你用了编译器。

你解释下为什么是这个答案。
2010-12-18 15:23
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:0 
解释一下吧,不能够解释的对不对!
假设它们在内存中是的地址是这样的:
0x00  0x01  0x02  0x03  0x04  0x05  0x06  0x07  0x08  0x09  0x0A  0x0B
1      2     3     \0    4     5     6     7      8    9     \0    cc(这个是填充字节)
当使用strcpy(s , d)之后上面内存中的东西就变为了:
0x00  0x01  0x02  0x03  0x04  0x05  0x06  0x07  0x08  0x09  0x0A  0x0B
4      5     6     7     8     9     \0     7      8    9     \0    cc

然后在输出的时候先放在输出缓冲区中,输出缓冲区中的内存就是这样,
4      5     6     7     8     9     \0     7      8    9     \0    cc

那么在输出的时候char数组d从8开始输出,知道遇到了\0结束,这样也就是输出了89 , 在输出char数组s的时候从4开始输出,遇到\0输出结束,即456789

愿用余生致力编程
2010-12-18 15:39
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
你debug了多久才得出的答案。

现在你不说d分配了8个空间了吧?
2010-12-18 15:47
iFreeBSD
Rank: 4
等 级:业余侠客
威 望:4
帖 子:474
专家分:236
注 册:2007-11-5
收藏
得分:0 
因为strcpy 移动了d内存空间的指针,系统是不会主动重置变量的内存空间的指针的。纠正刚才说的栈指针。

[ 本帖最后由 iFreeBSD 于 2010-12-18 16:01 编辑 ]

without further ado, let’s get started
2010-12-18 15:47
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:0 
回复 5楼 Devil_W
难道我给出的答案不是吗??debug了多久??哈哈哈!真的可笑呀,你说对久就多久吧!!!

和一个无聊之人聊了点无聊的话题!!嘎嘎!

愿用余生致力编程
2010-12-18 15:59
无尽苍穹
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:44
专家分:101
注 册:2007-3-28
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

原理正如4楼所说,但结果还是与CPU有关
64位下的结果
2010-12-18 16:01
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
以下是引用我菜119在2010-12-18 15:59:49的发言:

难道我给出的答案不是吗??debug了多久??哈哈哈!真的可笑呀,你说对久就多久吧!!!

和一个无聊之人聊了点无聊的话题!!嘎嘎!



第一,我不无聊

第二,以你现在的水平跟我比还差一大截. 但是从你debug的能力我相信,你有很大的发展空间。至少你不会再告诉d是分配了8个空间。

第三, 我如果再问你什么时候内存对齐用到分配8个空间的问题,你又未必能答出来了。或者要再debug很久才能给出答案。
2010-12-18 16:04
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
以下是引用无尽苍穹在2010-12-18 16:01:39的发言:


原理正如4楼所说,但结果还是与CPU有关
64位下的结果



先看看你的cpu是big ending 还little ending.
2010-12-18 16:08
快速回复:出一小题,考下内存堆栈
数据加载中...
 
   



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

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