c - 从 C 函数返回数组

标签 c arrays string return

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

相关文章:

arrays - 在 Excel 中使用 If 大语句并填充表格的剩余部分

c++ - 有没有办法在 linux 中编辑 Windows C++ exe 文件

创建自己的变量类型

ios - 数组初始化导致构建失败 - arrayForceCastU

string - 如何为相似的输入创建相似的散列?

java - java中获取状态码的正则表达式是什么?

string - 删除字符串Matlab末尾的下划线

C "expected expression before ' struct'"错误,因为使用了 typedef 或 header

c - C中带指针的冒泡排序单链表

sql - Bigquery - json_array 来自字段的额外多个元素