免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
11 [报告]
发表于 2006-11-11 13:03 |只看该作者
注意大小和长度

论坛徽章:
0
12 [报告]
发表于 2006-11-13 09:44 |只看该作者
我用的turboc2  ,输出的是5。

论坛徽章:
0
13 [报告]
发表于 2006-11-13 10:15 |只看该作者
和字节序有关

论坛徽章:
0
14 [报告]
发表于 2006-11-13 10:52 |只看该作者
经典和典型有区别吗?

论坛徽章:
0
15 [报告]
发表于 2006-11-13 11:08 |只看该作者
strcpy(buf,"abcd");  '\0'是存在buf+4的内存地址,  这个好像不是栈的问题 , 而是顺序地址内存里数据的存储问题吧,

论坛徽章:
0
16 [报告]
发表于 2006-11-13 11:18 |只看该作者
学到了!强

论坛徽章:
0
17 [报告]
发表于 2006-11-13 11:31 |只看该作者
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
        int i = 1;   //   0xbfffbec4
        char buf[4]; //   0xbfffbec0
        strcpy(buf, "AAAA"); //&buf[4] 之地址是 0xbfffbec4
        printf("%d\n", i);
        return 0;
}
//  变量i,buf在栈中, x86 的堆栈是向下生成的,buf后面有个‘\0’的结束符,正好覆盖了i的值 所以打印结果是0

int main(int argc, char *argv[])
{
        
        char buf[4];  // 0xbfffb2f4
        int i = 1;   //后定义 i 0xbfffb2f0
        strcpy(buf, "AAAA"); //&buf[4]  0xbfffb2f8
        printf("%d\n", i);
        return 0;
}
这个结果是 '1'

FreeBSD5.2 + gcc 3.4.2

论坛徽章:
0
18 [报告]
发表于 2006-11-13 11:57 |只看该作者
thanks mezilla,
明白了. 這也是要注意的錯誤呢...

论坛徽章:
0
19 [报告]
发表于 2006-11-13 14:57 |只看该作者
推荐使用strncpy

论坛徽章:
0
20 [报告]
发表于 2006-11-13 17:03 |只看该作者
一般int 型存放在内存中都是多字节的,具体的影响,要看整数存放的字节序
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP