Как вернуть указатель на массив строк в C - PullRequest
0 голосов
/ 08 мая 2019

Как функция может вернуть указатель на массив строк?

Я должен сделать это без использования библиотеки 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 ]

5 голосов
/ 08 мая 2019

У вас несоответствие типов.

Ваша функция определена как возвращающая 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;
}
2 голосов
/ 08 мая 2019
char** result = myFunc();

но переменная yout в функции автоматическая и не существует вне области действия функции

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