我在使用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的图片,但是没有得到它的回复:^)。
答案 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);