我有以下结构。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;

我想使用dniqsort排序。我正在尝试使用以下代码:
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参数指定。

10-07 18:31