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