如何在C中返回指向字符串数组的指针

时间:2019-05-08 20:50:43

标签: c arrays string pointers

函数如何返回指向字符串数组的指针?

我必须不使用C的string.h库来执行此操作。这是我到目前为止的内容:

#include <stdio.h>
#include <stdlib.h>

char* myFunc(){
    char* result[2];

    // the strings are originally dynamically allocated with some
    // function parameters which i've omitted to simplifiy the question.

    result[0] = "abc";
    result[1] = "def";
    return result;   
}

int main(void){
    char* result = myFunc();
    printf("%s\n%s\n", result[0], result[1]);
    return 0;
}

我希望有两个字符串,但是编译器会返回以下内容:

error: return from incompatible pointer type [-Wincompatible-pointer-types]
     return result;

2 个答案:

答案 0 :(得分:5)

您的类型不匹配。

您的函数已定义为返回char *,但是您返回的char *[]会衰减为char **。这就是警告的意思。

将返回类型以及您为其分配返回值的值更改为char **。另外,您无法返回指向局部变量的指针,因此您需要按照代码注释中的说明动态分配数组。

#include <stdio.h>
#include <stdlib.h>

char **myFunc(){
    char **result = malloc(2 * sizeof(*result));

    result[0] = "abc";
    result[1] = "def";
    return result;   
}

int main(void){
    char **result = myFunc();
    printf("%s\n%s\n", result[0], result[1]);
    return 0;
}

答案 1 :(得分:2)

char** result = myFunc();

但是函数中的yout变量是自动的,并且在函数范围之外不存在

char** myFunc(){
    char** result = malloc(2 * sizeof(*result));
    result[0] = something;
    result[1] = something_else;
    return result;   
}