簡體   English   中英

qsort在c中相等大小的char數組列表上

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM