动态内存问题
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 ?? 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个字节刚刚好。
楼上正解 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
那你想问的问题是不是我说的那样,你提问题就不全。(没有头尾)
就是讲s和t两个字符串连接成单个字符串r, 我想让r刚好分配足够的内存,那里为什么是加1而不是加2 {:10_277:} 学习电脑 发表于 2016-7-29 10:46
就是讲s和t两个字符串连接成单个字符串r, 我想让r刚好分配足够的内存,那里为什么是加1而不是加2
拼接的字符串只需要一个'\0' char *r;
r=(char*)malloc(strlen(s)+strlen(t)+2)
页:
[1]