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

时间:2017-01-24 22:19:18

标签: c arrays pointers

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

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>

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;我必须返回两个值(维度和数组)。而且,我无法编辑函数的参数。

我认为我的问题与this不同,因为在我的函数中有一个带指针的参数,函数没有指针......

3 个答案:

答案 0 :(得分:1)

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

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);

更新:由于您已重新提出问题:在呼叫站点预分配内存:

General error: 1215 Cannot add foreign key constraint

答案 1 :(得分:0)

只需要你的功能就有这个签名

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

并且在将参数传递给它时你应该

letturaFile = leggiSequenza(nomeFile, &dimensione);
这样,你就会有两件事。 此外,在你的函数中你只有seq的地方,你需要添加* seq,这样你就可以取消引用指针。

希望这有帮助!

答案 2 :(得分:0)

在主函数

中分配数组
 int *dimensione; = (int*) malloc(200*sizeof(int));

然后删除此行

free(seq);

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