我一直在阅读scandir(),alphasort()的手册页,并且显然已经将它们全部塞满了。 但仍然无法弄清楚如何实现自定义比较功能。
这是我的代码:
#include <stdio.h>
#include <dirent.h>
#include <sys/types.h>
int mySort(char*, char*);
int (*fnPtr)(char*, char*);
int main(){
struct dirent **entryList;
fnPtr = &mySort;
int count = scandir(".",&entryList,NULL,fnptr);
for(count--;count>=0;count--){
printf("%s\n",entryList[count]->d_name);
}
return 0;
}
int mySort(const void* a, const void* b){
char *aNew, *bNew;
if(a[0] == '.'){
*aNew = removeDot(a);
}
else{
aNew = a;
}
if(b[0] == '.'){
*bNew = removeDot(b);
}
else{
bNew = b;
}
return alphasort(aNew, bNew);
}
很容易看到我试图按字母顺序对文件名进行排序,而不管隐藏文件和普通文件(前导'。')。
但是,计算机将始终按照您的要求进行操作,而不是按照您的要求进行操作。
答案 0 :(得分:1)
排序例程mySort
就是问题所在。此比较函数必须是int (*)(const struct dirent **, const struct dirent **)
类型。例如:
int mySort(const struct dirent **e1, const struct dirent **e2) {
const char *a = (*e1)->d_name;
const char *b = (*e2)->d_name;
return strcmp(a, b);
}
建议更改为
int mySort(const struct dirent **e1, const struct dirent **e2);
int (*fnPtr)(const struct dirent **e1, const struct dirent **e2);