[英]Returning an array from a C function
我試圖弄清楚如何在C中返回數組。這是代碼。 我想做的是保存一個數組,然后使用函數返回將其打印出來。 我在這里做錯了什么?
#include <stdio.h>
#define DIM 50
char *func (char input[]);
int main(void)
{
char input[DIM];
printf("input? ");
fgets(input, DIM, stdin);
printf("output: %s", func(input));
return 0;
}
char *func(char input[])
{
int i;
char output[DIM];
for(i = 0; i < DIM; i++)
output[i] = input[i];
return &output;
}
在func
您將在此處返回指向局部變量的指針:
return &output;
離開函數后該函數將不存在,正如喬納森指出的那樣,您實際上正在返回一個指向char
數組的指針,如果您想返回該指針,則只需完成return output
但這仍然是錯誤的。
如果不能使用動態分配,則需要將輸出作為參數傳遞。
其他答案已經說明了一個問題:
另一個問題是給定的:
char output[DIM];
類型:
return &output;
是“指向char
數組的指針”,而不是char *
。 如果您寫了:
return output;
您就可以了-如果您整理出返回值的持續時間。 同樣,如果您將函數定義為返回指向數組的指針,則可以:
char (*func(char input[]))[]
{
static char output[DIM];
...
return &output;
}
請注意,除非這樣的靜態變量會使得該函數不可重入(在線程應用程序中使用是不安全的),否則除非該數組實際上是常量(在這種情況下,定義應該說它是常量),否則該變量將使函數不可重入。
可以返回地址,但不能那樣返回。
嘗試這個
char *func(char input[])
{
int i;
char *output = (char*)malloc(sizeof(char) * DIM);
for(i = 0; i < DIM; i++)
output[i] = input[i];
return output;
}
另一種方法是像“通過引用調用”那樣進行。 看起來像這樣
void func(char *input, char *output)
{
int i;
for(i = 0; i < DIM; i++)
output[i] = input[i];
}
而且您的主體應該看起來像這樣
int main()
{
char *input = (char*)malloc(sizeof(char) * DIM);
char *output = (char*)malloc(sizeof(char) * DIM);
printf("input? ");
fgets(input, DIM, stdin);
func(input, output);
printf("output: %s", output);
free(input);
free(output); // after you finished your work with this variable
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.