我正在尝试弄清楚如何在 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;
}
最佳答案
其他答案已经说明了一个问题:
- 从函数返回局部(非静态)变量的地址是不安全的。
另一个问题是:
char output[DIM];
类型:
return &output;
是“指向 char
数组的指针”而不是 char *
。如果你写道:
return output;
你会没事的——如果你整理好返回值的持续时间。类似地,如果您将函数定义为返回一个指向数组的指针,您也可以:
char (*func(char input[]))[]
{
static char output[DIM];
...
return &output;
}
请注意,像这样使用静态变量会使函数不可重入(在线程应用程序中使用不安全),除非数组实际上是常量(在这种情况下,定义应该说它是常量)。
关于c - 从 C 函数返回数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16738954/