我有以下结构。AtDiscountsShop
包含5tDiscount
结构。
#define MAXDISCOUNTS 50
typedef enum {FALSE, TRUE} bool;
typedef struct {
int dni;
float discount;
bool changed;
} tDiscount;
typedef struct {
tDiscount discounts[MAXDISCOUNTS];
int numDiscounts;
} tDiscountsShop;
我想使用
dni
按qsort
排序。我正在尝试使用以下代码:int compare(const void *s1, const void *s2)
{
tDiscount *e1 = (tDiscount *)s1;
tDiscount *e2 = (tDiscount *)s2;
return e1->dni - e2->dni;
}
qsort (discountsShop->discounts, discountsShop->numDiscounts, sizeof(discountsShop->discounts), compare);
如果我能解释一下我做错了什么,以及如何解决这个问题,我将不胜感激。提前谢谢。
最佳答案
这个
sizeof(discountsShop->discounts)
给出整个数组的大小。
您需要/想要的是一个元素的大小。
做这个
sizeof(*discountsShop->discounts)
或
sizeof(discountsShop->discounts[0])
从
qsort()
's documentation:void qsort(void *base, size_t nel, size_t width,
int (*compar)(const void *, const void *));
[...]
每个对象的大小(字节)由width参数指定。