免费注册 查看新帖 |

Chinaunix

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

[C] 有点晕了。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-04-29 17:03 |只看该作者 |倒序浏览
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
main(int argc, char **argv)
{
   char str[100]="wang";
   char num = 'a';
   char *p = &num;
   printf("%s\n", p);
}


[root@orcl2 ~]# gcc test2.c
[root@orcl2 ~]# ./a.out
awang


为什么数出来是awang ?  

论坛徽章:
0
2 [报告]
发表于 2014-04-29 17:35 |只看该作者
这个和局部变量保存在栈中有关系。
变量str num在栈的布局应该是  num在低位 str在高位 且连在一起。 而且字符num是没有\0的字符结束符。所以字符串地址p就将后面的内容也打印了出来。

论坛徽章:
3
15-16赛季CBA联赛之山东
日期:2016-10-30 08:47:3015-16赛季CBA联赛之佛山
日期:2016-12-17 00:06:31CU十四周年纪念徽章
日期:2017-12-03 01:04:02
3 [报告]
发表于 2014-04-29 19:45 |只看该作者
典型栈内布局:

         | 返回地址    |
         | 调用方栈基 |
         | ...  |
         | 'g' |
         | 'n' |
         | 'a' |
str     | 'w' |
num  | 'a' |
         |      |
         |      |
         |      |
p       |      |
         | ...  |
         +----+  <---- sp, 栈顶位置.

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP