gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 02:26:40 26 4
gpt4 key购买 nike

我有一个字符数组列表 ma​​lloced 如下。

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);

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

关于c - c中相等大小的char数组列表的qsort,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50190971/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com