我想在Adam的回答中补充一些内容,因为这可能无法在评论中完全表达。Adam是完全正确的。不过我怀疑你的generate_fields函数实际上可能会从用户那里获取输入,但我不确定。无论如何,有两种方法可以解决这个问题:
char ** generate_fields(char *, int num_fields, int size_of_field)
{
char ** options = malloc(num_fields*sizeof(char *));
for(int i = 0; i < num_fields; i++)
options[i] = malloc(size_of_field);
return options;
}
还有一个对应的免费函数,为了简洁起见我会省略它。你可以看到正在发生什么-我们正在传入字段数量和字段大小。根据需要进行更改。另一个选择是使生成的字段将数组大小返回给调用它的程序。我会这样做:
int generate_fields(char** options)
{
int num_fields = 0;
// somewhere here we get num_fields
options = malloc(num_fields*sizeof(char *));
for(int i = 0; i < num_fields; i++)
options[i] = malloc(size_of_field);
return num_fields;
}
你可以像这样从主函数调用:
int main()
{
int sizeofarray = 0;
char** fields;
sizeofarray = generate_fields(fields);
或者如果您不喜欢那种表示方式,您总可以坚持自己原来的方式:
char** generate_fields(int* size)
作为函数原型(这次返回选项并在代码中某处执行
size=
,然后从主函数中调用它,如下所示:
int sizeofarray = 0;
char** options;
options = generate_fields(&sizeofarray);
希望这能给你一些灵感,Adam。如果有必要,请随意编辑这些内容并将其添加到你的答案中。毕竟这些内容来自于你的回答。