我在 C 中对 dirent 结构进行排序时遇到问题。我已经尝试了所有方法,但无法让我的结构数组的值出现在我的比较中。我的代码如下所示:
void printSortedNames(){
struct dirent **file_list = (dirent**)malloc(5 * sizeof(dirent*));
int i = 0;
for (i = 0; i < directory_size; ++i){
file_list[i] = (dirent*)malloc(50 * sizeof(dirent));
}
DIR *dir;
struct dirent *sd;
dir = opendir(".");
if (dir == NULL){
printf("Error! unable to open directory.\n");
exit(1);
}
int count = 0;
while ((sd = readdir(dir)) != NULL){
file_list[count] = sd;
printf("%s\n", file_list[count]->d_name);
++count;
}
size_t file_list_size = sizeof(&file_list) / sizeof(struct dirent);
qsort(file_list, file_list_size, sizeof(struct dirent), sizeCompare);
}
我创建了一个简单的函数 sizeCompare 来显示我的函数正在工作,但我得到了空值。我的功能如下:
int sizeCompare(const void* a, const void* b){
printf("%s\n", ((const struct dirent*)a)->d_name);
}
有人可以向我解释为什么我的 sizeCompare 没有正确检索数组值吗?
更新: 我尝试过使用 qsort 中的大小,结果我的值不再为空。以下行给了我一个输出:
qsort(file_list, 1000, sizeof(struct dirent), sizeCompare);
显然 1000 不是一个好的解决方案。有人知道这样的数组的正确大小吗?
更新 2: sizeCompare 函数只接受第一个参数,第二个为空。
int sizeCompare(const void* a, const void* b){
const struct dirent *first_dirent = *(const struct dirent **) a;
const struct dirent *second_dirent = *(const struct dirent **) b;
.......
//first one works but second one is NULL
}