[英]C - Returning an array from a function
我正在嘗試創建一個函數,該函數以C語言返回一個字符串數組。我在網站上查看了其他一些問題,並嘗試了一些解決方案,但似乎沒有任何效果。 我試過(1)只是簡單地更改函數以更改數組內容而不是返回它,並且我試過(2)顯式地返回arrayz,但似乎都不起作用。 方法#1:在一個文件中,該函數:
int getArray(int num, char** array)
{
int i;
for (i = 0; i < num; i++)
array[i] = "whatever";
return 0;
}
在另一個文件中,我調用該函數:
char** array = malloc(sizeof(char*) * num));
getArray(num, files);
當我嘗試打印陣列文件的內容時,什么都沒有顯示。 方法2:在一個文件中,該函數:
char** getArray(int num)
{
int i;
char** array = malloc(sizeof(char*) * num));
for (i = 0; i < num; i++)
array[i] = "whatever";
return array;
}
在另一個文件中,我調用該函數:
char** files = getArray(num);
同樣,當我嘗試打印文件內容時,什么也沒有顯示。
我已經檢查過,並且在其中定義getFiles()
的頭文件已包含在進行調用的文件中。 我不確定發生了什么。
您將數組命名為“數組”,而不是“文件”:
char** array = malloc(sizeof(char*) * num));
getArray(num, files);
嘗試
getArray(num, array);
char** array = malloc(sizeof(char*) * num));
在這里,您為num
char指針分配內存,但不存儲num
字符串。 您還需要為字符串分配內存。 即“無論存儲什么”。
而且你不能分配一個字符串,
array[i] = "whatever";
你應該用
strcpy(array[i],"whatever");
您實際上需要為字符串分配空間。 您只是為指向字符串的指針分配內存。 在您提供的示例中,您可以使用strdup
為任何字符串分配空間。 像這樣:
int getArray(int num, char** array)
{
int i;
for (i = 0; i < num; i++)
array[i] = strdup("whatever");
return 0;
}
我不知道你想做什么。 但是我想你就是這樣。
#include <stdio.h>
char** getArray(int num)
{
int i;
char** array = malloc(sizeof(char*) * num);
char* whatever = "whatever";
for (i = 0; i < num; i++)
{
array[i] = whatever;
// array[i][0] = '0' + i;//Comment out because "whatever" is now constant that is immutable. So you can't change it.
}
return array;
}
main(){
char** arr;
int i;
arr = getArray(10);
for(i=0; i<10; i++)
{
printf("addr=%d, val=%s\n",arr[i], arr[i]);
}
}
輸出:
addr=39075716, val=whatever
addr=39075716, val=whatever
addr=39075716, val=whatever
addr=39075716, val=whatever
addr=39075716, val=whatever
addr=39075716, val=whatever
addr=39075716, val=whatever
addr=39075716, val=whatever
addr=39075716, val=whatever
addr=39075716, val=whatever
這個可以嗎? 在上述情況下, arr[i]
是只讀的,僅指向一個存儲空間。 有時這是非常有效的內存。
但我認為您想這樣做。
#include <stdio.h>
char** getArray(int num)
{
int i;
char** array = malloc(sizeof(char*) * num);
char* whatever;
for (i = 0; i < num; i++)
{
whatever = malloc(sizeof(char) * (strlen("whatever")+1));
strcpy(whatever, "whatever");//Now you can change "whatever". Because you created new readable-writable memory space by using malloc.
array[i] = whatever;
array[i][0] = '0' + i;//Now You can change array[i].
}
return array;
}
main(){
char** arr;
int i;
arr = getArray(10);
for(i=0; i<10; i++)
{
printf("addr=%d, val=%s\n",arr[i], arr[i]);
}
}
輸出:
addr=-356501104, val=0hatever
addr=-356501088, val=1hatever
addr=-356501072, val=2hatever
addr=-356501056, val=3hatever
addr=-356501040, val=4hatever
addr=-356501024, val=5hatever
addr=-356501008, val=6hatever
addr=-356500992, val=7hatever
addr=-356500976, val=8hatever
addr=-356500960, val=9hatever
現在您可以更改arr[i]
因為您使用了malloc並為新字符串(“ xhatever”)創建了內存空間。
希望對您有所幫助。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.