C:将目录中的文件列表存储到数组中

时间:2017-01-14 18:22:27

标签: c arrays file directory

所以我想编写一个遍历目录的程序,并将文件名添加到一个名为" filesList"的字符串数组中。但问题是,当它完成时,数组中的每个元素都是目录中最后一个文件的名称。这是代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>

int main(int argc, char *argv[])
{
int n=0, i=0;
DIR *d;
struct dirent *dir;
d = opendir(argv[1]);

//Determine the number of files
while((dir = readdir(d)) != NULL) {
    if ( !strcmp(dir->d_name, ".") || !strcmp(dir->d_name, "..") )
    {

    } else {
        n++;
    }
}
rewinddir(d);

char *filesList[n];

//Put file names into the array
while((dir = readdir(d)) != NULL) {
    if ( !strcmp(dir->d_name, ".") || !strcmp(dir->d_name, "..") )
    {}
    else {
        filesList[i]= dir->d_name;
        i++;
    }
}
rewinddir(d);

for(i=0; i<=n; i++)
    printf("%s\n", filesList[i]);
return 0;
}

1 个答案:

答案 0 :(得分:1)

这是因为您没有为filesList单个元素分配内存。你正在帮助它“dir-&gt; d_name”(基本上将filesList的每个元素指向一个d_name)。你应该为那里的每个条目做一个malloc。

else {
        filesList[i] = (char*) malloc (strlen(dir->d_name)+1);
        strncpy (filesList[i],dir->d_name, strlen(dir->d_name) );
        i++;
    }