我正在进行一项赋值,我需要让一个方法返回一个指向字符串数组的指针,从文件中读取。该函数有效,但是当我尝试将返回的指针分配给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函数。我该怎么做才能解决这个问题?
答案 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中的各个项目,这不会在上面显示。