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

My `qsort` program is not working as expected

我在使用 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 确实有效,我在调试器中反复检查过它。

提前致谢。

编辑:想要 post 调试器中后缀数组的图片,但没有得到它的评价:^)。

您没有 post makeSuffixArray() 的代码。假设它分配了一个 char* 的数组,长度比字符数多 1,因为包括空后缀,确实有一个可能的后缀比字符数多一个。

您的代码有 3 个问题:

  • 您将数组的第一个元素传递给 qsort 而不是指向字符串数组本身的指针。
  • 数组元素大小为sizeof(*suffixArray)。您错误地将 strlen(string)+1 作为第三个参数传递给 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);