我一直在尝试编写一个函数来对char指针数组进行排序并打印出来。使用qsort函数,但由于某种原因,我似乎无法在输出中对它们进行排序。输入基本上是MAC地址数组,格式如下:
84:1B:5E:A8:BF:7c中
74:E2:F5:17:96:89
00:8E:F2:C0:13:CC
74:E2:F5:17:96:89
我环顾四周,尝试了字符串比较部分和qsort的其他示例的不同功能,但我仍然无法使其工作。我的代码是:
int compare_function(const void *a,const void *b) {
return (strcmp((char *)a,(char *)b));
}
void countDistinct(char* MAClist[], int n){
char* bufList[n];
for(int i = 0; i < n; i++){
printf("success1 ");
bufList[i] = str_dup(MAClist[i]);
printf("success2 ");
printf("%s \n", bufList[i]);
printf("success \n");
}
qsort(bufList, n, sizeof(*bufList), compare_function);
for(int j = 0; j < n; j++){
printf("%s \n", bufList[j]);
}
}
我试图对它进行排序的原因是我可以有效地计算不同对象的数量。但是无论如何必须在稍后阶段再次进行排序,因此我需要重用该功能。任何帮助表示赞赏!
答案 0 :(得分:1)
需要修复比较功能,如下所示:
int compare_function(const void * a, const void * b ) {
// a, b are pointer to const char*, when passed from qsort
const char *pa = *(const char**)a;
const char *pb = *(const char**)b;
return strcmp(pa,pb);
}