繁体   English   中英

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

[英]Passing array to a function in C to store data

我是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){ ...

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

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

input_arrayinput_array的本地read_file ,因此当函数返回时,为它分配值的事实会丢失。 如果要为变量array分配值,则必须将指向该值的指针传递给函数。 即:

array_size = read_file(file, &array);

. . .

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM