1

代码:

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比较陌生,请多多包涵。

4

2 回答 2

3

您需要将单个元素的大小作为 的第三个参数传递qsort,如下所示:

qsort(company_list, *size, sizeof(company_struct_t), sort_by_price);

还要确保size指向一个int保存要排序的项目数的 。

于 2013-07-10T02:33:59.623 回答
0

如果真的是这条线失败了,

assert(ptr1_price->stock_price != NULL); //??? Why it failed?

你应该启动你的编译器警告。double将 a与指针进行比较时,您应该会收到警告。[对于价格,通常最好使用整数。0.000003 美元是什么意思?]

于 2013-07-10T02:45:39.797 回答