我的`qsort`程序没有按预期工作

时间:2015-12-19 11:14:57

标签: c qsort

我在使用qsort时遇到了一些问题。我搜索了不同的文档,但不明白为什么我的qsort不起作用!

以下是代码:

char** suffixArray = makeSuffixArray(string, strlen(string));
qsort(*suffixArray, strlen(string) + 1, strlen(string) + 1, (int(*)(const void*, const void*))strcmp);

注意: makeSuffixArray创建一个包含单词“bananas”的所有可能后缀的数组。 然后Qsort应按字典顺序对它们进行排序。

函数makeSuffixArray确实有效,我在调试器中反复检查过它。

提前致谢。

编辑:想在调试器中发布suffixArray的图片,但是没有得到它的回复:^)。

1 个答案:

答案 0 :(得分:4)

您没有发布makeSuffixArray()的代码。让我们假设它分配的长度为char*的数组比字符数多一个,因为包含空后缀,确实有一个可能的后缀,而不是字符。

您的代码有3个问题:

  • 您将数组的第一个元素传递给qsort,而不是指向字符串数组本身的指针。
  • 数组元素大小为sizeof(*suffixArray)。您错误地将strlen(string)+1作为第3个参数传递给qsort
  • strcmp投射到其他原型是不可移植的。此外,比较函数接收指向数组条目的指针,而不是它们的值,因此strcmp是完全不合适的。您必须按如下方式定义特定功能。

以下是修改后的版本:

int scmp(const void *a, const void *b) {
    return strcmp(*(const char **)a, *(const char **)b);
}

char **suffixArray = makeSuffixArray(string, strlen(string));

qsort(suffixArray, strlen(string) + 1, sizeof(*suffixArray), scmp);