C中的qsort()表示一个char指针数组

时间:2017-09-10 16:14:14

标签: c sorting c-strings qsort

我一直在尝试编写一个函数来对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]);
}

}

我试图对它进行排序的原因是我可以有效地计算不同对象的数量。但是无论如何必须在稍后阶段再次进行排序,因此我需要重用该功能。任何帮助表示赞赏!

1 个答案:

答案 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);
}