c - 如何在不使该数组全局化的情况下从另一个函数中释放动态分配的数组?
问题描述
#include <stdio.h>
char *mystrcat(char *s1, const char *s2); // prototype
char *newstring; // global pointer
int main(){
char string1[] = "test1";
char string2[] = "test1";
printf("Final string: %s\n", mystrcat(string1, string2));
free(newstring); // I'd like to free the array here, without using a global array
}
char *mystrcat(char *s1, const char *s2){
unsigned int len1=0;
while (*(s1+len1)!='\0') { // to count lenght of first string
len1+=1;
}
unsigned int len2 = 0;
while (*(s2+len2)!='\0') { // to count lenght of second string
len2+=1;
}
newstring = calloc(len1+len2+1, sizeof(char));
unsigned int i = 0;
size_t main_count = 0;
for (; main_count<len1; ++main_count, ++i){
*(newstring+main_count) = *(s1+i);
}
i = 0;
for (; main_count<len1+len2; ++main_count, ++i){
*(newstring+main_count) = *(s2+i);
}
return newstring;
}
这是一个连接两个字符串的程序。问题是我正在做一个练习,我必须使用那个原型,我不能改变它,所以我不能传递数组以供参考。那么如何在不使用 main 外部的全局数组的情况下将数组返回给 main,然后释放该数组(在 main 中)?
解决方案
您已经newstring
从中返回mystrcat
,您只需将其存储在一个变量中。
int main(){
char string1[] = "test1";
char string2[] = "test1";
char* newstring = mystrcat(string1, string2);
printf("Final string: %s\n", newstring);
free(newstring);
}
推荐阅读
- javascript - 如何更改主要反应数据表中的展开图标
- php - 基于变量的多个PHP页面的Apache重定向
- android - 如何更改 Android 应用中的默认活动?
- c# - 如何在 EF Core 中创建另一个具有不同逻辑的自动递增列?
- mephisto - 运行 parlai_chat_task_demo python3 parlai_test_script.py 时出现意外错误
- go - 我可以将地图值解压缩为函数参数吗?
- c++ - 为什么 * 不适用于列表中的第二个变量?
- android - Android 上的 Azure AD B2C:他的应用程序仍在使用旧版 MSAL 重定向 uri 并切换到 MSAL 本地身份验证
- android - 面对“每个孩子必须恰好布置一次。相关的导致错误的小部件是:脚手架”颤动中的错误
- reactjs - Nginx 发出 413 请求实体太大