鱼C论坛

 找回密码
 立即注册
查看: 1947|回复: 8

动态内存问题

[复制链接]
发表于 2016-7-26 10:24:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
char * r, *malloc();

        r = malloc(strlen(s) + strlen(t) + 1)


如果s和t都代表字符串,那么strlen的返回参数中是不包括\0的,那么如果strlen(s)的值是n,实际要分配n+1,的空间才对,为什么strlen(s) + strlen(t) + 1不是strlen(s) + strlen(t) + 2 ??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-7-26 19:00:56 | 显示全部楼层
char *r = NULL;
r = (char *)malloc((strlen(s)+strlen(t)) * sizeof(char) + 1);
我觉得你提这个问题是想把字符串s和t连接存放到指针r所指向的动态内存中,
如果用strcat()这个函数是会自动把字符串s结尾的'\0'覆盖的,所以r指向的内存用strlen(s) + strlen(t) + 1个字节刚刚好。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-7-26 19:20:59 From FishC Mobile | 显示全部楼层
楼上正解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-27 10:05:50 | 显示全部楼层
ljd884497 发表于 2016-7-26 19:00
char *r = NULL;
r = (char *)malloc((strlen(s)+strlen(t)) * sizeof(char) + 1);
我觉得你提这个问题是 ...

还是不懂为什么不是加2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-7-27 10:08:09 | 显示全部楼层
那你想问的问题是不是我说的那样,你提问题就不全。(没有头尾)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-29 10:46:35 | 显示全部楼层
ljd884497 发表于 2016-7-27 10:08
那你想问的问题是不是我说的那样,你提问题就不全。(没有头尾)

就是讲s和t两个字符串连接成单个字符串r, 我想让r刚好分配足够的内存,那里为什么是加1而不是加2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-2 21:34:50 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-8-5 15:38:07 | 显示全部楼层
学习电脑 发表于 2016-7-29 10:46
就是讲s和t两个字符串连接成单个字符串r, 我想让r刚好分配足够的内存,那里为什么是加1而不是加2

拼接的字符串只需要一个'\0'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2016-8-5 16:45:41 | 显示全部楼层
char *r;
r=(char*)malloc(strlen(s)+strlen(t)+2)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 06:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表