c中相等大小的char数组列表的qsort

qsort on equal sized list of char arrays in c

我有一个字符数组列表 malloced 如下。

list= (char**)malloc(LIST_SIZE* sizeof(*list));
for (int i = 0; i < LIST_SIZE; i++)
    list[i] = (char*)malloc(sizeof(char) * 33);//33 is the size of each element in the list

列表的大小可以增长到 25,000(LIST_SIZE),有时可能只有 10 个元素或更少。

我的 compare() 函数出错了。

    int compare(const void * a, const void * b)
{
    const char **fpa = (const char**)a;
    const char **fpb = (const char**)b;
    return strcmp(*fpa, *fpb);
    //return *(char *)a - *(char*)b;//This one also does not work
}

qsort()是这样调用的。我怀疑它失败是因为它被调用的方式,但我不明白为什么。

qsort(list, current_list_element_count, 33, compare);

您将错误的元素大小值传递给 qsort

即使你为每个数组分配了 33 个字节,你实际上并没有数组的数组。您拥有的是一个 指针数组 ,每个指针指向一个数组。

由于数组的每个成员都是一个 char *,您想要传递其大小:

qsort(list, current_list_element_count, sizeof(char *), compare);

或更一般地说:

qsort(list, current_list_element_count, sizeof(*list), compare);

这样,您传递的大小不取决于类型。