免费注册 查看新帖 |

Chinaunix

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

C 经典错误!!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-10 20:51 |只看该作者 |倒序浏览
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{

        int i = 5;
        char buff[4];
        strcpy(buff, "abcd");
        printf("%d\n", i);

        return 0;
}


输出的结果是0, 只知道是堆栈方面的问题, 但是怎么会出现这样的结果?

求大哥们指点!

论坛徽章:
0
2 [报告]
发表于 2006-11-10 20:54 |只看该作者
关注

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2006-11-10 20:54 |只看该作者
easy,栈溢出。

abcd后面的'\0',直接填充了i的位置。

论坛徽章:
0
4 [报告]
发表于 2006-11-10 20:57 |只看该作者
估计像我们这样的新手很容易犯类似的错误, 值得探讨啊.

期待各位的答疑回复!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2006-11-10 20:58 |只看该作者
原帖由 lee2008 于 2006-11-10 20:57 发表
估计像我们这样的新手很容易犯类似的错误, 值得探讨啊.

期待各位的答疑回复!


不容易,时刻记住串后面有'\0',数组不要越界就好啦。

关键是良好的编程风格和习惯。

论坛徽章:
0
6 [报告]
发表于 2006-11-10 21:01 |只看该作者
原帖由 aero 于 2006-11-10 20:54 发表
easy,栈溢出。

abcd后面的'\0',直接填充了i的位置。




老大, 还是不大明白啊, 能说详细点吗?


比较菜

论坛徽章:
0
7 [报告]
发表于 2006-11-10 21:05 |只看该作者
我明白了将char buff[4] 修改为char buff[5]  就可以了,呵呵


谢谢aero

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
8 [报告]
发表于 2006-11-10 21:05 |只看该作者
原帖由 lee2008 于 2006-11-10 21:01 发表




老大, 还是不大明白啊, 能说详细点吗?


比较菜


i             '\0'
buf[3]    d
buf[2]    c
buf[1]    b
buf[0]    a

栈的结构就是这样的。^_^。

论坛徽章:
0
9 [报告]
发表于 2006-11-10 21:10 |只看该作者
原帖由 aero 于 2006-11-10 21:05 发表


i             '\0'
buf[3]    d
buf[2]    c
buf[1]    b
buf[0]    a

栈的结构就是这样的。^_^。




再次感谢aero老大, 你说的很明白很直观, 我明白了.

论坛徽章:
0
10 [报告]
发表于 2006-11-10 22:05 |只看该作者
顶。。。。强..

  学习中...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP