免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: kgisme170
打印 上一主题 下一主题

char数组初始化第一个元素,那么剩下的就是0;否则就是乱码。为什么? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-09-01 10:31 |只看该作者
函数局部变量定义后在编成汇编代码时,由编译器计算出本函数一共有多少个局部变量,本函数一共要申请多少栈空间,然后用subl汇编指令改变栈顶寄存器esp的值,为这些变量留出栈内的空间。并不会把这部分分配的栈空间清零或做任何操作。

而以后我们对局部变量的访问都通过 esp+偏移量的方式(或ebp-偏移量方式)。
实际上我们对局部变量的初始化, 是要执行一条对movl  $X(%esp+偏移量)的指令的(X为你设定的値)。

论坛徽章:
0
12 [报告]
发表于 2010-09-01 10:33 |只看该作者
即使你写成char buf[128]={'1'}; 其它的仍然被初始化为0
liwangli1983 发表于 2010-09-01 10:27



    啥?

论坛徽章:
0
13 [报告]
发表于 2010-09-01 11:06 |只看该作者
标准规定

论坛徽章:
0
14 [报告]
发表于 2010-09-01 13:20 |只看该作者
唐浩强哥哥这么说的。
如果初始化了一部分,剩下的自动初始化为0。

论坛徽章:
0
15 [报告]
发表于 2010-09-01 14:38 |只看该作者
本帖最后由 zhangsuozhu 于 2010-09-01 14:42 编辑

{:2_179:}我面壁去了。兄弟们多保重~~~~~

以前经常这样写  char *p[32] = {NULL};

嗯。这样是不会出错的。因为NULL就是0。所以觉得数组的初始化,都会赋相同的值。

底子啊底子。我错了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP