我试图弄清楚在 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/54912226/