【发布时间】:2013-07-22 08:19:17
【问题描述】:
我正在尝试使用qsort() 对结构数组进行排序,但令人沮丧的是,它不起作用。我已经阅读了qsort() 的手册页,并且我认为我的比较器函数在语法上看起来还不错,但是当我在调用qsort() 后打印“排序”数组时,我的数组中没有任何内容排序。
代码:
#include <stdlib.h>
#include <stdio.h>
#define ARRAY_SZ 5
typedef struct SingleChar
{
unsigned char Character;
unsigned int Weight;
} *SingleCharPtr;
int CompareWeights(const void *a, const void *b)
{
const SingleCharPtr p1 = (SingleCharPtr)a;
const SingleCharPtr p2 = (SingleCharPtr)b;
// printf("Weight1: %u\tWeight2: %u\n", p1->Weight, p2->Weight);
// return (p1->Weight - p2->Weight);
if (p1->Weight < p2->Weight)
return -1;
else if (p1->Weight > p2->Weight)
return 1;
else
return 0;
}
SingleCharPtr MakeChar(unsigned char c, unsigned int w)
{
SingleCharPtr scptr = malloc(sizeof(struct SingleChar));
if (!scptr)
{
fprintf(stderr, "[Error] Out of memory\n");
exit(1);
}
scptr->Character = c;
scptr->Weight = w;
return scptr;
}
int main(void)
{
SingleCharPtr *chars = malloc(ARRAY_SZ * sizeof(SingleCharPtr));
chars[0] = MakeChar('B', 3);
chars[1] = MakeChar('E', 7);
chars[2] = MakeChar('A', 4);
chars[3] = MakeChar('D', 6);
chars[4] = MakeChar('C', 2);
qsort(chars, ARRAY_SZ, sizeof(SingleCharPtr), &CompareWeights);
int i;
for (i = 0; i < ARRAY_SZ; i++)
{
printf("Character: %c\tWeight: %u\n", chars[i]->Character, chars[i]->Weight);
free(chars[i]);
}
free(chars);
return 0;
}
另外,在比较器函数 (CompareWeights()) 中,我发现当我打印 SingleCharPtr 指向的结构的权重时,我得到的都是 0。
任何指向正确方向的指针都将受到高度赞赏。
【问题讨论】:
-
请不要发布代码的链接或截图。将其粘贴到此处并格式化。
-
@H2CO3,注意。谢谢!