尝试从Windows中的目录中获取文件名。通过名为 list_files 的函数执行此操作。由于某种原因(或者看起来像这样(,该函数没有做任何事情,因为每当我打印数组时,它都是空的。
我之前测试过这段代码,它工作正常。我一直在编码(这最初是一个更长的代码(我注意到每当我以后必须使用数组时,它都会返回 0(什么都没有(
void list_files();
char *filesList[0][254];
int i = 0, n = 0, l = 254;
char directory[] = {"C:/Users/test/Downloads/test/"};
int main()
{
list_files();
}
void list_files()
{
DIR *d;
struct dirent *dir;
d = opendir(directory);
//Determine the number of files
while((dir = readdir(d)) != NULL) {
if (strcmp(dir->d_name, ".") != 0 && strcmp(dir->d_name, "..") != 0)
n++; // determine, count array size based on files
}
rewinddir(d);
//Put file names into the array
while((dir = readdir(d)) != NULL) {
if (strcmp(dir->d_name, ".") != 0 && strcmp(dir->d_name, "..") != 0)
{
filesList[i][l] = (char*) malloc(sizeof(char) * 100); // allocate memory
strcpy(filesList[i][l], dir->d_name); // put file names in to array
i++; // do +1 to read each single array line
}
}
rewinddir(d);
printf("%s",n);
for(i;i<n;i++){
printf("%s/n", filesList[i][l]);
}
}
我希望看到(或得到(的是一个在目录中用文件名填充的数组。 就我而言,该目录包含 3 个文件。该程序不适用于带有 x00 文件的大文件。所以当我打印数组时:
你好.txt,再见.txt再见.exe
使用 char *fileList[254]
声明一个包含 254 个指针的数组。
使用循环for(n = 0; n < i;n++){
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
void list_files();
char *filesList[254];
int i = 0, n = 0, l = 254;
char directory[] = {"./"};
int main()
{
list_files();
}
void list_files()
{
DIR *d;
struct dirent *dir;
d = opendir(directory);
//Put file names into the array
while((dir = readdir(d)) != NULL) {
if ( ( i < 254) && ! ( strcmp(dir->d_name, ".") == 0 || strcmp(dir->d_name, "..") == 0))
{
filesList[i] = malloc( strlen ( dir->d_name) + 1); // allocate memory
strcpy(filesList[i], dir->d_name); // put file names in to array
i++; // do +1 to read each single array line
}
}
for(n = 0; n < i;n++){
printf("%sn", filesList[n]);
}
for(n = 0; n < i;n++){
free ( filesList[n]);
}
}
除了指出的其他问题外,您永远不会重置此代码中的i
:
while((dir = readdir(d)) != NULL) {
if (strcmp(dir->d_name, ".") != 0 && strcmp(dir->d_name, "..") != 0)
{
filesList[i][l] = (char*) malloc(sizeof(char) * 100); // allocate memory
strcpy(filesList[i][l], dir->d_name); // put file names in to array
i++; // do +1 to read each single array line
}
}
rewinddir(d);
printf("%s",n);
for(i;i<n;i++){
printf("%s/n", filesList[i][l]);
}
当您到达时
for(i;i<n;i++){
i
很可能等于n
。 我说"可能"是因为您的代码没有考虑目录中的条目数在两个readdir()
循环之间发生变化的可能性。
对此的快速解决方法是在for
循环开始时简单地将i
设置为零:
for(i=0;i<n;i++){