我将在这里添加亚当的答案,因为这可能不适合评论。亚当是完全正确的。但是,我怀疑您的 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;
}
然后你像这样从 main 调用:
int main()
{
int sizeofarray = 0;
char** fields;
sizeofarray = generate_fields(fields);
或者如果你不喜欢那个符号,你可以一直坚持你有的:
char** generate_fields(int* size)
作为函数原型(这次返回选项并在代码中的某处执行size=,然后像这样从main调用:
int sizeofarray = 0;
char** options;
options = generate_fields(&sizeofarray);
希望能给你更多的想法,Adam,请随时根据需要将任何/所有这些内容编辑到你的答案中,无论如何它都来自你的答案。