返回C中的字符串数组(char*)



想象一下这个相当简单的场景。我有一个函数,它可以进行一些操作,并最终返回一个字符指针数组。为了简单起见,让该函数不带参数:

#include <stdio.h>
char **func(void);
int main() {
printf("%sn", func()[0]);
return 0;
}
char **func() {
static char arr[3][10] = {"hi", "bye", "cry"};
return arr;
}

我希望能够在main()函数中访问此数组。我将数组设为静态,以避免将地址返回到func()范围中定义的局部变量。此代码可编译,但带有警告:

警告:从不兼容的指针类型返回[-Wincompatible指针类型]

 nbsp nbsp;返回arr;

 nbsp nbsp nbsp nbsp nbsp nbsp nbsp;^

但是我应该如何生成return参数呢?指向字符数组的指针?我认为在C中,返回数组是一种糟糕的做法。

运行此程序会导致无效的分段错误。

那么我做错了什么呢?我可以不返回指向字符指针数组的指针吗?因此,char **?我是否合并了数组/指针衰减?如何返回字符串数组?有没有一种方法可以在不使用static关键字的情况下返回字符串数组?

编辑:你们肯定都能理解我的困惑吗?这不像C的数组指针衰减功能是微不足道的。

在语句return arr;中,arr将衰减为指向一个10个字符的数组的指针,即类型为char (*)[10],而函数的返回类型是char **。两种指针类型都不兼容
您可以将声明中arr的类型从数组数组更改为指针数组。

static char *arr[3] = {"hi", "bye", "cry"};   

或者您可以将函数的返回类型更改为char (*)[10]

char (*func())[10] {...}

数组:

static char arr[3][10] = {"hi", "bye", "cry"}; 

是一个由10个字符组成的数组。这与char**不兼容。

尝试

static char *arr[] = {"hi", "bye", "cry"};

相反。

最新更新