我是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/