在C中返回一个字符串数组

时间:2014-10-22 20:50:15

标签: c arrays string pointers return

我正在进行一项赋值,我需要让一个方法返回一个指向字符串数组的指针,从文件中读取。该函数有效,但是当我尝试将返回的指针分配给main函数中的变量时,我最终得到一个空值数组。这是我的代码:

#include <stdio.h>

char **buildAnsArray(){

    FILE *in;
    int num, i;

    in = fopen("data.txt", "r");
    fscanf(in, "%d", &num);

    char ansArray[10][num];

    for(i = 0; i < num; i++){
        fscanf(in, "%s", ansArray[i]);
    }

    return ansArray;
};


main(){
    char **ansArray = buildAnsArray();
}

我正在使用的输入文件(data.txt)以:

开头
3
B
20
1101

ansArray(在buildAnsArray中)正确包含{'B','20','1101'},但ansArray(在main中)为空。我知道我可以将所有内容移动到main而不用担心将指针返回到字符串数组,但是赋值需要buildAnsArray函数。我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:1)

char ansArray[10][num];
return ansArray;

是一个临时变量。一旦函数返回,它就会被销毁。

这样做: ...

char** ansArray = malloc(num * sizeof(char*));
for(i = 0; i < num; i++){
    char* item = malloc(10*sizeof(char));

    fscanf(in, "%s", item);
    ansArray[i] = item;

}

...     return ansArray;

然后

main(){

    char **ansArray = buildAnsArray();
    printf("%s", ansArray[1]);
    free(ansArray);
}

此外,由于字符串的数量是在函数中分配的,因此您还需要返回num,以便释放ansarray中的各个项目,这不会在上面显示。