[英]Return an array of char in C and malloc usage
第一次嘗試:
char* loadValues (char* str) {
char* toReturn[5];
.. some operations here ..
return toReturn
}
這顯然會返回警告並且不會正常工作,因為內存位置將在函數完成后被釋放。
所以我想到了使用 malloc,但是,我不明白這如何與數組一起使用。
第二次嘗試:
char* loadValues (char* str) {
char (*toReturn)[5] = malloc(sizeof *toReturn);
.. some operations here ..
return toReturn
}
我的toReturn
包含字符串,例如toReturn[0]
可能是"Hello"
有什么建議嗎?
據我了解,您想返回一個指針數組並為該數組的指針分配內存。 使用您當前的代碼,您不能返回指針數組,因為它是本地的。 您可以通過以下方式進行:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char** loadValues () {
char** toReturn;
int i;
toReturn = malloc(5*sizeof(char*));
for(i=0;i<5;i++)
{
toReturn[i] = malloc(25); //Change the size as per your need
strncpy(toReturn[i], "string",i+1); //Something to copy
}
return toReturn;
}
int main()
{
int i;
char **arr = loadValues();
for(i=0;i<5;i++)
{
printf("%s\n", arr[i]);
}
for(i=0;i<5;i++)
{
free(arr[i]);
}
free(arr);
return 0;
}
注意loadValues
的返回類型和為數組分配的內存在main
中被釋放。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void loadValues (char **toReturn) {
int i;
for(i=0;i<5;i++)
{
toReturn[i] = malloc(25); //Change the size as per your need
strncpy(toReturn[i], "string",i+1); //Something to copy
}
}
int main()
{
int i;
char *arr[5];
loadValues(arr);
for(i=0;i<5;i++)
{
printf("%s\n", arr[i]);
}
for(i=0;i<5;i++)
{
free(arr[i]);
}
return 0;
}
您還應該檢查對malloc
的調用是否成功並處理錯誤。
malloc 只是通過分配一塊內存並返回指向開頭的指針來工作。 這里可能有點棘手的是你正在制作的數組不包含字符,它包含指向字符的指針,這意味着你不能簡單地說
char* toReturn[5] = malloc(memory);
據我所知,您需要為 toReturn 的五個字符指針分配足夠的內存,然后遍歷元素和 malloc,無論您認為需要多少內存。 在釋放數組本身之前,要格外小心,記得再次遍歷數組並在完成后釋放所有內存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.