c中字符数组等长列表的排序
我有一个字符数组列表malloced,如下所示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
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:thisconst char**fpa=(const char**)a代码>应该是char*const*fpa=a
.OT^2:无需强制转换malloc()
。至少如果你真的做了C而不是C++。注意:即使这个答案使用“代码> >数组很容易阅读,它们不是数组,而是指向同一类型的连续数。@ StAdvurr数组等价物是什么?我指的是它的声明和分配。@John\u Dintlist1[10]
和intlist2[25000][33]
都是数组int*list3[25000]
是一个数组(指针)。鉴于“增长高达25000”,perhasp是否使用list3
和strdup()
?
qsort(list, current_list_element_count, sizeof(*list), compare);