簡體   English   中英

qsort比較函數未調用?

[英]qsort comparison function not invoked?

因此,我使用qsort根據我稱為“鍵”的結構中的int值對結構數組進行排序。 但是盡管我的數組已正確填充,但似乎並沒有對我的結構進行排序...

看來qsort從來沒有調用我的比較函數。 通過對函數內的打印輸出語句的簡單測試即可看到這一點。 我的“測試”從未出現。

比較功能:

int compare (const void *a, const void *b){
    struct Record* a_r = (struct Record*)(a);
    struct Record* b_r = (struct Record*)(b);

   /*test*/
     printf("test");

    return (a_r->key - b_r->key);
}

我的qsort電話:

    qsort(arr, (sizeof(arr)/sizeof(struct Record)), sizeof(struct Record), compare);

我的比較功能有問題嗎? 還是我沒有傳遞正確的變量?

我的數組聲明:

struct Record *arr = malloc(size->st_size); //where st_size is stat() of input file

sizeof(arr)是指針的大小,因為arr被定義為struct Record * 除以一個struct Record的大小,這很可能是0。

假設您的文件僅包含記錄,並且您正在讀取整個文件,請使用size->st_size/sizeof(struct Record) 甚至更好,因為您可能仍然需要其他地方的記錄數,因此請在讀取輸入文件后設置一個變量並使用該變量。

您需要傳遞size->st_size / sizeof(struct Record)而不是sizeof(arr) / sizeof(struct Record)因為sizeof(arr)是指針的大小,並且通過推斷, sizeof(Record)等於或大於指針的大小(因此,您將0或1個元素傳遞給qsort() ,因此qsort()不需要調用比較器,因為大小為0或1的數組已被排序。

假定size->st_size是固定長度記錄文件的大小,每個記錄都是一個struct Record 否則, malloc()毫無意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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