【发布时间】:2014-12-18 11:00:24
【问题描述】:
我正在处理一项任务,其中要求我有一个方法返回一个指向字符串数组的指针,该指针是从文件中读取的。该函数有效,但是当我尝试将返回的指针分配给主函数中的变量时,我最终得到一个空值数组。这是我的代码:
#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 函数。我该怎么做才能解决这个问题?
【问题讨论】:
-
不是 100% 确定这与您的问题有关,但如果您想从函数返回一个指针,您应该在堆上分配您的数组(使用
malloc)。现在你正在堆栈上创建你的数组,这意味着它可以(并且将会)在你的函数调用之后最终被清理 -
这有 许多 个不同形式的重复项,但最终归结为:您正在返回一个自动变量的地址(即,一旦您的函数不再存在返回,因此调用未定义的行为)。将更多日志添加到火灾中,生成的指针类型甚至与您声明的函数结果类型不兼容(
char**不与char[][N]相同)。如果您的编译器没有警告您任何一个,您需要提高警告级别,使其更加详细。 -
请注意,函数最后一个右大括号后面的分号实际上是一个空声明。不要在不需要的地方写分号。
标签: c arrays string pointers return