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

次のように、個々の要素のサイズを の 3 番目のパラメータとして渡す必要がありますqsort

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

また、ソートするアイテムの数を保持するをsize指していることを確認してください。int

于 2013-07-10T02:33:59.623 に答える