【发布时间】:2017-01-21 17:32:10
【问题描述】:
所以想象一下这个相当简单的场景。我有一些函数可以进行一些操作并最终返回一个 char 指针数组。为简单起见,让该函数不带参数:
#include <stdio.h>
char **func(void);
int main() {
printf("%s\n", func()[0]);
return 0;
}
char **func() {
static char arr[3][10] = {"hi", "bye", "cry"};
return arr;
}
我希望能够在我的main() 函数中访问这个数组。我将数组设为静态以避免将地址返回到在func() 范围内定义的局部变量。此代码编译,但有一个警告:
警告:从不兼容的指针类型返回 [-Wincompatible-pointer-types]
返回 arr;
^
但是我应该怎么做返回参数呢?指向 char 数组的指针?我认为在 C 中返回数组是不好的做法。
运行此程序会导致无用的分段错误。
那么我做错了什么?我不能返回指向 char 指针数组的指针吗?因此,char **?我是否将数组/指针衰减混为一谈?我将如何返回一个字符串数组?有没有办法在不使用static 关键字的情况下返回字符串数组?
编辑:你们肯定能够理解我的困惑吗?这不像 C 语言的数组指针衰减功能是微不足道的。
【问题讨论】:
-
您没有
char *的数组。char**和char[][]不是同一种数据类型。为什么不将你的数组声明为static char *arr[] = {"hi", "bye", "cry"};然后你可以像原始代码一样返回arr。 -
你做错了什么?您想返回一个 char 指针数组,但没有 拥有 一个 char 指针数组。 (这就像想回到一个不会发生全球变暖的世界。)