【发布时间】:2015-11-02 13:01:53
【问题描述】:
我正在尝试从文件列表中读取文件名并将这些名称存储在 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新手,所以我不确定。请帮忙!
已经改进并添加了要求的东西。
【问题讨论】:
-
发布代码时,您应该检查缩进的一致性和可读性。
-
发布
List_of_input_files.txt的内容 -
您正在将所有数据读入同一个数组,从而覆盖之前的数据。可能不是你打算做的。
-
@ITguy - 发布输入文件。此外,每次你进入 linebuffer 时,你都会覆盖之前的内容。
Filenames是一个指针数组。所有这些指针都指向 lineBuffer。同样,lineBuffer 指向的数据会随着每次调用 fread 而改变。在使用strdup函数从文件中读取后,您应该制作每个字符串的副本。将数组的元素设置为每次在 lineBuffer 上调用的此函数的返回值。 ;) -
@Caleb - 实际上,它们是输入文件中的换行符。打印出用单引号括起来的字符串,很明显这就是那些 \n 的来源。