免费注册 查看新帖 |

Chinaunix

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

初学,字符串指针问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-11 09:45 |只看该作者 |倒序浏览
//问题一:
        char* buf;
        buf=new char[5];
        strcpy(buf,"aaaa");
        buf=new char[10];
        strcpy(buf,"bbbb");
        //请问现在buf占用内存是多少?会是两次new 的累加吗?


//问题二:
        char* buf2;
        buf2=new char[1];
        strcpy(buf2,"1234567890123");
        printf("%s\n",buf2);

        //这段代码执行正常,是意外还是合法?
        //new char[x] 中的x只是为了检查系统是否有x空间?

        //请指点迷津,不胜感激!!!

[ 本帖最后由 zhaocong94005 于 2008-7-11 09:58 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-07-11 09:48 |只看该作者
字符串越界了,字符串需要申请的空间,要比字符数多1

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
3 [报告]
发表于 2008-07-11 09:51 |只看该作者
1.你这里已经给buf分配好了大小空间了,分配多少就是多少
2. 缓冲区溢出,所以字符串拷贝时可以使用strncpy代替strcpy,来保证目的字符串有足够大的空间

论坛徽章:
0
4 [报告]
发表于 2008-07-11 09:57 |只看该作者
1、你第一个内存泄露,分配后没释放
2、缓冲区溢出

论坛徽章:
0
5 [报告]
发表于 2008-07-11 10:18 |只看该作者
//问题一:
        char* buf;   
        对指针buf而言,它只占4个字节
        buf=new char[5];
        向系统申请5个字节空间,buf指向他们的首地址
     不管buf申请了多大空间,它只占4个字节

//问题二:
     char* buf2;
        buf2=new char[1];
        只在内存中申请了1个字节空间
        strcpy(buf2,"1234567890123");
        可以正常执行,但是多余的字符将会覆盖系统内存中原有数据,
     将会产生不可估计的后果。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
6 [报告]
发表于 2008-07-11 10:20 |只看该作者
原帖由 fcf7699854 于 2008-7-11 10:18 发表
//问题一:
        char* buf;   
        对指针buf而言,它只占4个字节
        buf=new char[5];
        向系统申请5个字节空间,buf指向他们的首地址
     不管buf申请了多大空间,它只占4个字节

...


偶觉得LZ的意思是指指针所指向的那块内存有多大吧。

论坛徽章:
0
7 [报告]
发表于 2008-07-11 10:32 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
8 [报告]
发表于 2008-07-11 10:43 |只看该作者
基础问题啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP