[英]Returning an array of strings in C
我正在做一个分配,在该分配中,我需要一个方法返回一个指向字符串数组的指针,该指针从文件中读取。 该函数有效,但是当我尝试将返回的指针分配给主函数中的变量时,最终得到的是空值数组。 这是我的代码:
#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而不用担心将指针返回到字符串数组,但是分配需要buildAnsArray函数。 我该怎么做才能解决此问题?
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;
}
...返回ansArray;
接着
main(){
char **ansArray = buildAnsArray();
printf("%s", ansArray[1]);
free(ansArray);
}
另外,由于在函数中分配了字符串数,因此您还需要返回num,以便可以释放ansarray中的各个项目,上面没有显示。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.