如何将数组从函数返回到main

我必须使用该函数打开文件,读取它,将第一个值保存为以下元素(维度)的数量以及seq[]数组中的其他值。 我不知道如何在main中返回dimension和seq[] ; 我需要它,因为我必须在其他函数中使用这些值。 如代码所示,函数返回维度(dim),但我不知道如何返回数组。

 #include  #include  #include  #include  int leggiSequenza(char *nomeFile, int *seq) { FILE *in; int i; int dim; if((in = fopen(nomeFile, "r"))==NULL) { printf("Error.\n"); return -1; } fscanf(in, "%d", &(dim)); printf("Find %d values.\n", dim); if(dim < 0) { printf("Errore: negative value.\n"); return -1; } seq = (int*) malloc(dim*sizeof(int)); i=0; while(!feof(in) && i<(dim)) { fscanf(in, "%d", &seq[i]); i++; } for(i=0; i<(dim); i++) { printf("Value in position number %d: %d.\n", i+1, seq[i]); } free(seq); fclose(in); return dim; } int main(int argc, char* argv[]) { int letturaFile; char nomeFile[200]; int *dimensione; printf("Insert file name:\n"); scanf("%s", nomeFile); printf("\n"); letturaFile = leggiSequenza(nomeFile, dimensione); dimensione = &letturaFile; printf("dimension = %d\n", *dimensione); return 0; } 

我认为问题的焦点是*seq ; 我必须返回两个值(维度和数组)。 而且,我无法编辑该function的参数。

我认为我的问题与此不同,因为在我的函数中有一个带指针的参数,而且函数没有指针…

更改函数以通过指针获取数组指针:

 int leggiSequenza(char *nomeFile, int **seq); // ^^^^^^^^^ 

然后使用变量的地址调用它:

 leggiSequenza(nomeFile, &dimensione); // ^^^^^^^^^^^ 

在函数定义中,如下更改细节:

 int leggiSequenza(char *nomeFile, int **seq) { // ... int *local_seq = malloc(dim*sizeof(int)); // use local_seq in place of seq // free(local_seq); // delete ... *seq = localsec; // ... and replace with this return dim; } 

最后,调用者需要释放数组:

 free(dimensione); 


更新:因为您已经重新询问了您的问题:在呼叫站点预分配内存:

 int * p = malloc(200 * sizeof(int)); int dim = leggiSequenza(filename, p); // ... free(p); 

只需你的function就有这个签名

 int leggiSequenza(char *nomeFile, int **seq) 

当你将参数传递给它时,你应该这样做

 letturaFile = leggiSequenza(nomeFile, &dimensione); 

那样,你会有两件事。 此外,在你的函数中你只有seq的地方,你需要添加* seq,这样你就可以取消引用指针。

希望这可以帮助!

在main函数中分配数组

  int *dimensione; = (int*) malloc(200*sizeof(int)); 

然后删除这一行

 free(seq); 

你应该在main函数中拥有数组中的数据。