免费注册 查看新帖 |

Chinaunix

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

[C] malloc分配字符串后,末尾多了几个奇怪字符 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-09-22 01:32 |只看该作者 |倒序浏览
我在程序中先为char* s分配了一段空间,然后比如赋值为"qwe"。
之后我再为另外一个指针分配空间,然后输出s的时候就变成"qwe!"了,多了一个叹号。
调试之后发现这两个指针的地址很近,会不会是因为第二个指针的空间把第一个的空间覆盖了呢?

论坛徽章:
0
2 [报告]
发表于 2011-09-22 02:13 |只看该作者
本帖最后由 x5miao 于 2011-09-22 02:14 编辑

回复 1# willyomg


    malloc() 分配的空间内所存储的数据是随机的;

printf()输出%s的时候是通过移动字符指针知道遇到内容为'\0'的地址为止的。

所以要得到你想要的结果,请在malloc()申请成功之后调用memset()或者bzero()之类的函数来初始化堆。或者直接调用callloc()函数

论坛徽章:
0
3 [报告]
发表于 2011-09-22 09:02 |只看该作者
无码无真相

!!!!!!!!!!!!!!!第3000贴回给你了!!!!!!!!!!!!!!!

评分

参与人数 1可用积分 +10 收起 理由
davelv + 10 恭喜

查看全部评分

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
4 [报告]
发表于 2011-09-22 12:27 |只看该作者
无码无真相

!!!!!!!!!!!!!!!第3000贴回给你了!!!!!!!!!!!!!!!
雨过白鹭洲 发表于 2011-09-22 09:02


如何加分减分啊??? 一直不会

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
5 [报告]
发表于 2011-09-22 17:02 |只看该作者
无码无真相

!!!!!!!!!!!!!!!第3000贴回给你了!!!!!!!!!!!!!!!
雨过白鹭洲 发表于 2011-09-22 09:02



    无码不应该是有真相么?{:3_187:}

论坛徽章:
0
6 [报告]
发表于 2011-09-22 17:02 |只看该作者
贴上代码?

论坛徽章:
14
水瓶座
日期:2014-06-10 09:51:0215-16赛季CBA联赛之江苏
日期:2017-11-27 11:42:3515-16赛季CBA联赛之八一
日期:2017-04-12 14:26:2815-16赛季CBA联赛之吉林
日期:2016-08-20 10:43:1215-16赛季CBA联赛之广夏
日期:2016-06-23 09:53:58程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-09 06:20:0015-16赛季CBA联赛之上海
日期:2015-12-25 16:40:3515-16赛季CBA联赛之广夏
日期:2015-12-22 09:39:36程序设计版块每日发帖之星
日期:2015-08-24 06:20:002015亚冠之德黑兰石油
日期:2015-08-07 09:57:302015年辞旧岁徽章
日期:2015-03-03 16:54:15
7 [报告]
发表于 2011-09-22 22:10 |只看该作者
我在程序中先为char* s分配了一段空间,然后比如赋值为"qwe"。
之后我再为另外一个指针分配空间,然后输出 ...
willyomg 发表于 2011-09-22 01:32



    指针地址挨着并不表示指针内容(被引用对象的地址)挨着嘛

    既然是赋值 s="qwe",没理由后面被改掉,因为qwe后面自动加了一个'\0'的,贴代码看看

论坛徽章:
0
8 [报告]
发表于 2011-09-23 11:01 |只看该作者
申请的内存有清空吗?或者赋值完在最后加'\0'?

论坛徽章:
0
9 [报告]
发表于 2011-09-23 22:37 |只看该作者
我同意2楼的,因为在malloc所分出的内存是内存池里面的是没有初始化的还有保留之前的数据的,所以最好用之前先初始化,可能没有遇到/0然后就把以前那些数据给输出来。

论坛徽章:
0
10 [报告]
发表于 2011-09-24 09:07 |只看该作者
memset一下吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP