[英]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.