【发布时间】:2015-03-25 06:25:04
【问题描述】:
我有这样的结构:
typedef struct item{
char label[10];
int support;
};
我创建了一个这样的结构数组:
struct item* finstr = (struct item*)malloc(sizeof(struct item)*10);
我用适当的值填充了数组,并希望使用 qsort 函数根据 'support' 的值对数组进行排序。但是,数组根本没有排序。输出与输入相同。
这是对 qsort 函数的调用和“比较器”函数的代码:
qsort((void*)finstr,(sizeof(finstr)/sizeof(finstr[0])),sizeof(finstr[0]),comparator);
比较函数:
int comparator(const void* i1,const void* i2) {
int l = ((struct item*)i1)->support;
int r = ((struct item*)i2)->support;
return l-r;
}
我不明白我在哪里犯了错误。任何帮助是极大的赞赏。
提前致谢。
【问题讨论】:
-
sizeof(finstr)是指针finstr的大小,而不是指针引用的内存量。 -
另外,第一个 typedef 不应该编译 imo(它缺少名称)
-
不要在比较中使用减法 (L-R) 技巧。当 L 为大正数且 R 为大负数时,您可能会遇到问题。结果可能是否定的。