0

我想制作一个字符串数组,将我所有的常规文件保存在当前目录中

我有以下

DIR *d = opendir(".");
struct dirent *dirent;
struct stat fileStat;
char **files;

while (dirent = readdir(d)) {
    stat(dirent->d_name, &fileStat);

    if (S_ISREG(fileStat.st_mode)) {

    }

}

closedir(d);

我尝试在旅途中(在while循环中)分配每个元素,因为我的文件夹中的常规文件的数量不是预先确定的。但是,我不断收到段错误。有任何想法吗?

4

1 回答 1

0

问题是甚至没有分配指向字符串的指针的内存。

您需要 malloc 和 remallocfiles来保存指向字符串的指针,然后分别 malloc 每个字符串,或者使用 strdup 为您完成它。

size_t files_length = 0;
size_t files_capacity = 16;
char **files = (char**)malloc(files_capacity*sizeof(*files));
if (files == NULL)
    explode();

while (...) {
    if (...) {
        if (files_capacity < files_length + 1) {
            files = (char**)remalloc(files, files_capacity*2*sizeof(*files));
            if (files == NULL) {
                explode();
            }
            files_capacity *= 2;
        }
        files_index = files_length++;
        files[files_index] = strdup(...);
    }
}

// free everything

或者,您可以files只制作一个大型指针数组,char *files[1024]然后将文件名 strdup 放入其中。但这当然会限制您可以处理的文件数量,并且如果您只有几个文件要处理,则会花费不必要的内存,尽管只有指针会花费您额外的费用,而不是字符串。

于 2012-10-25T02:40:21.577 回答