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);
这样,您传递的大小不取决于类型。
我有一个字符数组列表 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);
这样,您传递的大小不取决于类型。