【发布时间】:2014-04-01 17:46:12
【问题描述】:
在实现 C 中内置的 qsort() 以按存储的 int 值 (hitCount) 对结构数组进行排序时遇到了麻烦。
我的结构:
typedef struct words {
const char *word;
int hitCount;
} words;
我正在尝试使用 Microsoft (http://support.microsoft.com/kb/73853) 给出的示例。
所以我在顶部:
typedef int (*compfn)(const void*, const void*);
及比较方法:
int compare (words *a, words *b) {
if (a->hitCount > b->hitCount) {
return -1;
} else if (a->hitCount < b->hitCount) {
return 1;
} else {
return 0;
}
}
然后在另一个方法中,我调用 qsort 并用我的数组名称和其他详细信息替换 Microsoft 示例:
qsort((void *) &output, outputLength, sizeof(words), (compfn)compare);
这会导致分段错误。
我不完全了解如何使用 qsort,所以我假设我从 Microsoft 的示例中改编它的地方我做错了。
我希望我已经包含了这个错误,并且可以对我应该做什么以使其正常工作得到一些启发。
非常感谢!
【问题讨论】:
-
什么是输出?显示调用函数的部分代码
-
包含qsort的完整方法:pastebin.com/y6ziACWy
-
什么是
outputLength?output的定义在哪里? -
除非你们都知道它的作用并且确实需要它,否则不要进行任何显式转换。让编译器警告你,不要闭嘴。此外,始终使用
-Wall -Wextra -pedantic进行编译 -
@Matt:请不要使用任何外部代码。相反,请提供MCVE。周围更好。尤其是当您在 cmets 中隐藏该链接时。