c中字符数组等长列表的排序

c中字符数组等长列表的排序,c,arrays,sorting,qsort,C,Arrays,Sorting,Qsort,我有一个字符数组列表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 qsort()是这样调用的。我怀疑它失败是因为它的调用方式,但我不明白为什么 qsort(l

我有一个字符数组列表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
qsort()是这样调用的。我怀疑它失败是因为它的调用方式,但我不明白为什么

qsort(list, current_list_element_count, 33, compare);

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

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

由于数组的每个成员都是一个
字符*
,因此需要传递该字符的大小:

qsort(list, current_list_element_count, sizeof(char *), compare);
或者更一般地说:

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

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

qsort(列表、当前元素计数、大小*列表和比较)@Stargateur你是说我为什么要用一个神奇的数字?或者为什么是33码?没关系,我没有看到
list[I]=(char*)malloc(sizeof(char)*33)
但正如dbush所说,这不是预期的大小
qsort()
OT:this
const char**fpa=(const char**)a应该是
char*const*fpa=a
.OT^2:无需强制转换
malloc()
。至少如果你真的做了C而不是C++。注意:即使这个答案使用“代码> >数组很容易阅读,它们不是数组,而是指向同一类型的连续数。@ StAdvurr数组等价物是什么?我指的是它的声明和分配。@John\u D
intlist1[10]
intlist2[25000][33]
都是数组
int*list3[25000]
是一个数组(指针)。鉴于“增长高达25000”,perhasp是否使用
list3
strdup()
qsort(list, current_list_element_count, sizeof(*list), compare);