| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5622 人关注过本帖
标题:关于使用malloc函数动态申请内存空间的问题
只看楼主 加入收藏
yangzexun24
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2010-12-15
收藏
得分:0 
回复 10楼 azzbcc
'\0'的问题我当然想过
问题是假设我申请的是4个内存空间 但实际有22个
至于为什么没有使用strncmp函数 这个我也试过不知道为什么不行
就像我用的strncpy函数 指定了只复制len1个 而函数会自动为str1[len1]初始化为'\0'
但是没有 是我后来手动初始化的
如果不添加这个'\0' 不但会显示出未初始化的元素 更重要的是根本就不能正确判断了
2013-04-01 15:52
yangzexun24
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2010-12-15
收藏
得分:0 
回复 10楼 azzbcc
我原来是怎么编的我都忘了
这个是能成功运行的代码 之前的代码删了

应该是要为pc申请len+1个空间 不然没地方放'\0'
或者申请len个空间 用strncmp函数比较前len个字符

之前显示pc有22个字符内存空间的问题应该就是没有地方存放'\0'
导致使用%s格式输出的printf函数输出只到找到下一个内存中的'\0'为止停止输出

看来是大意了
2013-04-01 16:05
yangzexun24
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2010-12-15
收藏
得分:0 
以下是引用azzbcc在2013-4-1 15:30:02的发言:

假设字符串长度为 3,申请 3个空间就够了么,‘\0’可没有算到字符串长度里面
 
既然楼主知道用 strncpy和strcmp,为什么不用 strncmp?
那在程序结束之前的情况下 应该在什么地方释放pc申请的内存空间
2013-04-01 16:08
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
以下是引用yangzexun24在2013-4-1 15:52:59的发言:

'\0'的问题我当然想过
问题是假设我申请的是4个内存空间 但实际有22个
至于为什么没有使用strncmp函数 这个我也试过不知道为什么不行
就像我用的strncpy函数 指定了只复制len1个 而函数会自动为str1[len1]初始化为'\0'
但是没有 是我后来手动初始化的
如果不添加这个'\0' 不但会显示出未初始化的元素 更重要的是根本就不能正确判断了

22个?

strcpy会复制 len个,也会自动初始化 str[len] = '\0',但他前提是 你提供了足够的空间,没有足够的空间,就不会初始化‘\0’

因为没有‘\0’,输出会沿地址向下检测,知道遇到‘\0’才停止输出,也许就是因为这个让你误以为申请了22个吧


[fly]存在即是合理[/fly]
2013-04-01 16:19
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:5 
以下是引用yangzexun24在2013-4-1 16:08:43的发言:

那在程序结束之前的情况下 应该在什么地方释放pc申请的内存空间

如果用strncmp,还有必要申请空间么?


[fly]存在即是合理[/fly]
2013-04-01 16:20
yangzexun24
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2010-12-15
收藏
得分:0 
以下是引用azzbcc在2013-4-1 16:20:43的发言:

 
如果用strncmp,还有必要申请空间么?
虽然可以用strncmp判断第二个字符串中是否包含第一个字符串
但是如果不为pc申请空间 那返回的是pc所指地址后的内容只到'\0'
然后就只能利用循环len1做判断条件 用putchar逐个输出字符
这样太麻烦了
2013-04-01 16:56
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
直接输出子串就是了


[fly]存在即是合理[/fly]
2013-04-01 17:16
yangzexun24
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2010-12-15
收藏
得分:0 
以下是引用azzbcc在2013-4-1 17:16:17的发言:

直接输出子串就是了
怎么输出
2013-04-01 17:18
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
puts(str1)


[fly]存在即是合理[/fly]
2013-04-01 17:25
yangzexun24
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2010-12-15
收藏
得分:0 
以下是引用azzbcc在2013-4-1 17:25:23的发言:

puts(str1)
题目要求的输出是 指向第二个字符串中出现第一个字符串位置的指针
不是当第二个字符串中出现第一个字符串时 输出第一个字符串啊。。。
2013-04-01 17:32
快速回复:关于使用malloc函数动态申请内存空间的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016731 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved