我在从代码中的文件分配数组时遇到问题。代码的目的是向函数传递一个文件名、一个整数(将设置为文件中的行数)和一个 char* 数组,每行一个,在函数内打开文件,每个行传递到数组中。
我要打开的文件是 Storelist.txt 并包含:
842B
832B
812B
848B
代码中的主要功能是:
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include <stdlib.h> /* strtol */
void pass_list(int *final_legnth_list, char* filename, char* final_list[]);
main(int argc, char* argv[])
{
int store_n=0;
char* store_param= "storelist.csv";
char* store_list[100]={0};
pass_list(&store_n,store_param, store_list);
printf("STATUS: size of array [%i]\n",store_n);
int jj=0;
for(jj=0;jj<store_n;jj++){
printf("Number: %i is store: [%s]\n",jj, store_list[jj]);
}
return 0;
}
最后的功能是:
void pass_list(int *final_legnth_list, char* filename, char* final_list[]){
FILE *temp_file; //opening the file
temp_file = fopen (filename, "rt");
int ii=0;
if (temp_file!=NULL){
char temp_line[30];
char temp_item[30];
while(fgets(temp_line, 30, temp_file) != NULL){ //looping over the lines
sscanf(temp_line,"%s",temp_item); //getting the value without the end line
printf("STATUS:output = [%s]\n",temp_item);
final_list[ii] = temp_item; //setting the array
ii++;
}
(*final_legnth_list) = ii;
}
}
最终输出显示:
STATUS:output = [842B]
STATUS:output = [832B]
STATUS:output = [812B]
STATUS:output = [848B]
STATUS: size of array [4]
Number: 0 is store: [848B]
Number: 1 is store: [848B]
Number: 2 is store: [848B]
Number: 3 is store: [848B]
所以它正在从文件中读取正确的值,但它总是以某种方式完成分配给文件的最终值。
我认为这可能是由于数组存储的是 temp_item 的位置,而不是值。有谁知道我做错了什么以及如何获得所需的功能?