【问题标题】:correct return type for C function?C函数的正确返回类型?
【发布时间】:2020-10-21 14:23:20
【问题描述】:

我在这样声明的函数中使用了一个字符串数组

char (*array)[PATH_MAX] = malloc (1000 * sizeof *array);

分配 1000 个大小为 PATH_MAX (1024) 的字符指针。

我希望函数返回那个特定的数据结构,即返回指针array。但我无法选择正确的返回类型。

warning: returning 'char (*)[1024]' from a function with return type 'int' makes integer from pointer without a cast [-Wint-conversion]

我知道我不能将 int 作为返回类型,但 char** 也不起作用。

warning: returning 'char (*)[1024]' from a function with incompatible return type 'char **' [-Wincompatible-pointer-types]

我尝试使用 char (*)[1024] 作为返回类型,但它给了我通用的 C 错误消息,让我相信我没有使用正确的语法。

error: expected identifier or '(' before ')' token
   38 | char (*)[1024] read_dir (char *path) {
      |        ^

是否有正确的语法来实现这一点,还是我做错了?

【问题讨论】:

    标签: c function pointers return-type


    【解决方案1】:

    你需要定义如下函数:

    char (*read_dir(char *path))[PATH_MAX] {
    

    这将返回类型指定为指向大小为PATH_MAXchar * 的数组的指针。

    【讨论】:

    • 你的建议成功了。基本的,没有额外的装饰来让它工作。谢谢!
    【解决方案2】:

    typedef的时间

    typedef char arr1k_char[1000];
    
    arr1k_char *foo(int n) {
        arr1k_char *x = malloc(n * sizeof *x);
        return x;
    }
    

    https://ideone.com/Cqxa61

    【讨论】:

    • 顺便说一句:不要在 typedef 中隐藏 *... 看起来不错,但要避免使用 typedef char (*ptr_array1k_char)[1000];
    • 您的解决方案也解决了我的问题。谢谢你。我还发现,使用起初似乎是多余的东西——以 typedef 的形式——实际上使我不必在每次创建特定类型的变量时重复编写长类型声明。所以我会接受你的回答作为最有帮助的。再次感谢!
    • 感谢您的反馈 :)
    猜你喜欢
    • 1970-01-01
    • 2021-03-10
    • 2013-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多