我想创建一个包含当前目录中所有常规文件的字符串数组
我有以下
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);
我尝试在每个元素上使用mallocing(在while循环中),因为我的文件夹中的常规文件数量没有预先确定。但是,我不断收到段错误。任何想法?
答案 0 :(得分:0)
问题是即使是指向字符串指针的内存也没有分配。
你需要malloc和remalloc files
来保存指向字符串的指针,然后分别对每个字符串进行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]
,然后将文件名绑定到其中。但是,这当然会给你一个内置的限制,你可以处理的文件数量,如果你只有几个文件要处理,会花费不必要的内存,虽然它只是指向你的额外费用,而不是字符串。< / p>