[英]qsort on equal sized list of char arrays in c
我有一個如下分配的字符數組列表。
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);
這樣,您傳遞的尺寸不取決於類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.