Search code examples
c

how to return a string array from a function


char * myFunction () {

    char sub_str[10][20]; 
    return sub_str;

} 

void main () {

    char *str;
    str = myFunction();

}

error:return from incompatible pointer type

thanks


Solution

  • A string array in C can be used either with char** or with char*[]. However, you cannot return values stored on the stack, as in your function. If you want to return the string array, you have to reserve it dynamically:

    char** myFunction() {
        char ** sub_str = malloc(10 * sizeof(char*));
        for (int i =0 ; i < 10; ++i)
            sub_str[i] = malloc(20 * sizeof(char));
        /* Fill the sub_str strings */
        return sub_str;
    }
    

    Then, main can get the string array like this:

    char** str = myFunction();
    printf("%s", str[0]); /* Prints the first string. */
    

    EDIT: Since we allocated sub_str, we now return a memory address that can be accessed in the main