我是C语言的新手,在这里,我试图从文件中读取整数(由空格分隔)并将它们存储在名为array的数组中。

最初,我将array设置为NULL,然后将其传递给read_file函数。在read_file中,一切正常。但是,当从堆栈弹出read_file时,array仍指向NULL,而不是read_file加载的数据。我究竟做错了什么?

#include <stdio.h>
#include <stdlib.h>
#include <iostream>

int read_file(FILE *file, int *input_array);

FILE *file;

int main(){
    char *pathname = " numbers.txt";
    if(fopen_s(&file, pathname, "r"))
        puts("File could not be opened.");

    int *array = NULL;
    int array_size = read_file(file, array);

    int i;
    for(i = 0; i < array_size; i++){
        printf("%d\n", array[i]);
    }
    fclose(file);
    std::cin.ignore();
    return 0;
}

int read_file(FILE *file, int *input_array){
    int array_size = 10;
    input_array = (int *) malloc(array_size * sizeof(int));

    int i;
    for(i = 0; !feof(file) && i < array_size; i++){
        fscanf_s(file, "%d", &input_array[i]);
        //printf("%d\n", input_array[i]);
    }
    return i;
}

最佳答案

变量input_array按值传递给函数。因此,实际参数array不会更改其值。为了更改array的值,您将需要以类似于以下方式的方式将引用(指针)传递给它:

int read_file(FILE *file, int **input_array){ ...


然后在函数内部相应地更改对其的访问。

但是更好的主意可能是将预分配的数组传递给该函数,以使该函数仅更改其内容,因此签名将保持不变。

关于c - 将数组传递给C中的函数以存储数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31928887/

10-16 19:07
查看更多