【发布时间】:2010-10-03 15:05:39
【问题描述】:
我对 C 很陌生,所以如果这是非常标准的知识,我深表歉意..
我有一个这样的函数,我将一堆 C 风格的字符串附加在一起并输出:
char *example(int n, int days, int years){
char *ret;
if (n < 5) {
ret = (char*)malloc(sizeof(char)*256);
sprintf(ret, "There are %d days in %d years", days, years);
ret = (char*)malloc(strlen(ret));
return ret;
}
else {
char *s1;
char *s2;
char *s3;
s1 = example(n/2, days, years);
s2 = example(n + 5, days, years);
s3 = example(n--, days, years);
int length = strlen(s1) + strlen(s2) + strlen(s3);
ret = (char*)malloc(length);
strcat(ret, s1);
strcat(ret, s2);
strcat(ret, s3);
return ret;
}
}
这是在每个新的串联前加上一些垃圾字符。我假设我的问题在于我的内存管理,但我不确定.. 这简单吗?我做错了什么?另外,这怎么能做得更干净?
【问题讨论】:
-
哎呀!!!递归!!!你要去哪里释放所有的内存?
-
好问题!你如何释放你这样返回的记忆?我可能应该想到的事情..
标签: c string memory memory-management