代码:
struct company_struct
{
company_name_t company_name;
double stock_price;
company_stock_t company_stock;
};
typedef struct company_struct company_struct_t;
int sort_by_price(const void * ptr1, const void * ptr2)
{
assert(ptr1 != NULL);
assert(ptr2 != NULL);
const company_struct_t * ptr1_price = (const company_struct_t *) ptr1;
const company_struct_t * ptr2_price = (const company_struct_t *) ptr2;
assert(ptr1_price->stock_price != NULL); //??? Why it failed?
assert(ptr2_price->stock_price != NULL);
if(ptr1_price->stock_price > ptr2_price->stock_price) return -1;
else if (ptr1_price->stock_price == ptr2_price->stock_price) return 0;
else if (ptr1_price->stock_price < ptr2_price->stock_price) return 1;
}
qsort(company_list, *size, sizeof(company_list), sort_by_price);
当我运行程序时,断言失败。我对C比较陌生,请耐心等待。
答案 0 :(得分:3)
您需要将单个元素的大小作为qsort
的第三个参数传递,如下所示:
qsort(company_list, *size, sizeof(company_struct_t), sort_by_price);
另外,请确保size
指向包含要排序的项目数的int
。
答案 1 :(得分:0)
如果确实这条线路失败了,
assert(ptr1_price->stock_price != NULL); //??? Why it failed?
你应该加快你的编译器警告。您应该收到警告,将double
与指针进行比较。 [对于价格,通常使用整数更好。 $ 0.000003是什么意思?]