gpt4 book ai didi

c - 在 C 中返回字符串数组 (char*)

转载 作者:太空宇宙 更新时间:2023-11-04 06:17:44 25 4
gpt4 key购买 nike

想象一下这个相当简单的场景。我有一些函数可以进行一些操作并最终返回一个 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() 范围内定义的局部变量。此代码编译,但有警告:

warning: return from incompatible pointer type [-Wincompatible-pointer-types]

    return arr;

              ^

但是我应该怎样做 return 参数呢?指向 char 数组的指针?我认为在 C 中返回数组是不好的做法。

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

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

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

最佳答案

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

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

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

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

关于c - 在 C 中返回字符串数组 (char*),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41782382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com