将未初始化的数组传递给C中的函数

时间:2016-07-30 10:23:28

标签: c dynamic-memory-allocation

我的程序的目的很简单,从文件中读取int数字序列,这里是代码:

int main()
{
   FILE *file = fopen("test.txt", "r");

   int *array = NULL; // Declaration of pointer to future array;
   int count;

   process_file(file, array, &count);

   return 0;
}

// Function returns 'zero' if everything goes successful plus array and count of elements as arguments
int process_file(FILE *file, int *arr, int *count)
{
    int a;
    int i;
    *count = 0;

    // Function counts elements of sequence
    while (fscanf(file, "%d", &a) == 1)
    {
        *count += 1;
    }

    arr = (int*) malloc(*count * sizeof(int)); // Here program allocates some memory for array

    rewind(file);

    i = 0;
    while (fscanf(file, "%d", &a) == 1)
    {
        arr[i] =  a;
        i++;
    }

    fclose(file);

    return 0;
}

问题是,在外部函数(main)中,数组没有改变。 怎么可能修好?

1 个答案:

答案 0 :(得分:4)

您需要通过引用传递数组,以便该函数可以更改其调用者的数组。

必须是:

process_file(FILE *file, int **arr, int *count)

并且这样打电话:

process_file(file, &array, &count);

另外,我建议: