Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将数组传递给C中的函数以存储数据_C_Arrays_Function_Pointers_Null - Fatal编程技术网

将数组传递给C中的函数以存储数据

将数组传递给C中的函数以存储数据,c,arrays,function,pointers,null,C,Arrays,Function,Pointers,Null,我是C语言的新手,这里我尝试从文件中读取整数(用空格分隔),并将它们存储在一个名为array的数组中 最初,我将array设置为NULL,然后将其传递给read\u file函数。在读取文件中,一切正常。但是,当从堆栈中弹出read\u file时,array仍然指向NULL,而不是指向read\u file加载的数据。我做错了什么 #include <stdio.h> #include <stdlib.h> #include <iostream> int

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

最初,我将
array
设置为
NULL
,然后将其传递给
read\u file
函数。在
读取文件
中,一切正常。但是,当从堆栈中弹出
read\u file
时,
array
仍然指向
NULL
,而不是指向
read\u 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;
}
#包括
#包括
#包括
int read_文件(file*file,int*input_数组);
文件*文件;
int main(){
char*pathname=“numbers.txt”;
if(fopen_s(&file,路径名,“r”))
puts(“无法打开文件”);
int*array=NULL;
int array_size=读取文件(文件,数组);
int i;
对于(i=0;i
变量
输入数组
通过值传递给函数。因此,实际参数
array
不会更改其值。要更改
数组的值
,您需要以类似以下方式向其传递引用(指针):

int read_file(FILE *file, int **input_array){ ...
然后在函数内部相应地更改对它的访问


但更好的办法可能是将预先分配的数组传递给函数,这样函数只会更改其内容,因此签名将保持不变。

input\u数组
read\u file
的本地数组,因此当函数返回时,为其分配值的事实将丢失。如果要为变量
数组
赋值,则必须将指向该变量的指针传递到函数中。即:

array_size = read_file(file, &array);

. . .

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

投反对票仅仅是因为你们应该在大学里,或者在你们开始写代码之前的某个时刻学会这一点。