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/16738954/

相关文章:

string - 以视觉而非语音方式音译不明确的 unicode 字符

c# - 可枚举字符串列表中字符串的索引或位置

c - 如何用 C 语言将联系人添加到电话簿程序中?

c - 使用 MPI_Scatter 发送矩阵的列

ios - 解析没有键的Json数组swift 4

Java,在数组上插入对象的方法,返回 boolean 值

C: 如何倒序打印列表?

c - 是否可以将 char 指针分配给 float 值?

ruby - Ruby 中是否存在某种看不见的数组终止?

java - 如何将文本文件的第一句话作为点之前的字符串删除?