学习电脑 发表于 2016-7-26 10:24:57

动态内存问题

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 ??

ljd884497 发表于 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个字节刚刚好。

锅巴灯神 发表于 2016-7-26 19:20:59

楼上正解

学习电脑 发表于 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

ljd884497 发表于 2016-7-27 10:08:09

那你想问的问题是不是我说的那样,你提问题就不全。(没有头尾)

学习电脑 发表于 2016-7-29 10:46:35

ljd884497 发表于 2016-7-27 10:08
那你想问的问题是不是我说的那样,你提问题就不全。(没有头尾)

就是讲s和t两个字符串连接成单个字符串r, 我想让r刚好分配足够的内存,那里为什么是加1而不是加2

子煜从嘉 发表于 2016-8-2 21:34:50

{:10_277:}

Krant5 发表于 2016-8-5 15:38:07

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

拼接的字符串只需要一个'\0'

一直都在的星空 发表于 2016-8-5 16:45:41

char *r;
r=(char*)malloc(strlen(s)+strlen(t)+2)
页: [1]
查看完整版本: 动态内存问题