gpt4 book ai didi

c - C 逐行读取并存储在数组中

转载 作者:行者123 更新时间:2023-11-30 21:17:53 27 4
gpt4 key购买 nike

我正在尝试从文件列表中读取文件名并将这些名称存储在 filenames[] 数组中。

const int NUMBER_OF_FILES = 100;//here please define number of files listed in 
char* filenames [NUMBER_OF_FILES];//will contain all the file names in the list provided in List_of_input_files.txt

int counter=0;
FILE *inputfilelist = fopen("List_of_input_files.txt", "r");
char line[256];


while(fgets(line, sizeof(line), inputfilelist)){

filenames[counter]=line;
printf("%s counter: %d\n\n\n", filenames[counter], counter);
counter++;
}


//**************PROBLEM IS HERE***************

printf("\n\n\n\n%s Counter: 3 ", filenames[2]);// this is only to test what is inside this filename stored

fclose(inputfilelist);

输出为:

File1.txt
counter: 0


File2.gif
counter: 1


File3.bat
counter: 2


File4.xml
counter: 3


File5
counter: 4


File6.7z
counter: 5


File7.xlsx
counter: 6






File7.xlsx
Counter : 3

问题是最后一个文件名应该是 File3.bat,但不知为何却不是。它始终显示行中的最后一个文件,即 File7.xlsx。

也许这是我犯的一个愚蠢的错误,没有清楚地看到它或其他什么。我是 c 新手,所以我不确定。请帮忙!

它已得到改进,并添加了所需的内容。

最佳答案

这一行

filenames[counter]=line; 

没有做你想做的事;它将line缓冲区的地址复制到filenames[counter];所有的filenames[i]都指向line,因此当您打印filenames[2]时,它将打印出最后读入的内容

如果要将 line内容复制到filenames[counter],则需要分配内存来保存副本使用 malloccalloc,然后使用 strcpy 复制内容(或者使用 strdup 如果可用):

filenames[counter] = malloc( strlen( line ) + 1 );
if ( filenames[counter] )
strcpy( filenames[counter], line );

filenames[counter] = strdup( line ); // if you have strdup available;
// it's not a standard function

完成后,您需要释放每个filenames[i]

或者,您可以将 filenames 数组声明为 char 的二维数组:

char filenames[NUMBER_OF_FILES][256];

并直接读入数组:

fgets(filenames[counter], sizeof(filenames[counter]), inputfilelist))

关于c - C 逐行读取并存储在数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33478230/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com