C 我的'qsort'程序未按预期工作
我在使用qsort时遇到了一些问题。我搜索了不同的文档,但不明白为什么我的qsort不起作用 代码如下:C 我的'qsort'程序未按预期工作,c,qsort,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生成一个包含单词“香蕉”的
char** suffixArray = makeSuffixArray(string, strlen(string));
qsort(*suffixArray, strlen(string) + 1, strlen(string) + 1, (int(*)(const void*, const void*))strcmp);
注:
makeSuffixArray生成一个包含单词“香蕉”的所有可能后缀的数组。
然后Qsort应该按照字典顺序对它们进行排序
函数makeSuffixArray确实有效,我在调试器中反复检查了它
提前谢谢
编辑:想在调试器中发布suffixArray的图片,但没有得到它的声誉:^)。您没有发布
makeSuffixArray()的代码。
。假设它分配的char*
数组的长度比字符数多一个,因为包括空后缀,可能的后缀确实比字符多一个
您的代码有3个问题:
- 将数组的第一个元素传递给
,而不是指向字符串数组本身的指针qsort
- 数组元素大小为
。您错误地将sizeof(*后缀数组)
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);
您没有发布
makeSuffixArray()
的代码。假设它分配的char*
数组的长度比字符数多一个,因为包括空后缀,可能的后缀确实比字符多一个
您的代码有3个问题:
- 将数组的第一个元素传递给
,而不是指向字符串数组本身的指针qsort
- 数组元素大小为
。您错误地将sizeof(*后缀数组)
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);
传递
*suffixArray
可能不是最好的主意strlen(string)+1,strlen(string)+1
不。qsort
的第三个参数应该是(留作练习)。@ukasz qsort的第一个参数是数组中元素的地址,不是吗?如果我单独通过后缀数组,qsort会将其转换为垃圾。haccks,如果我没弄错的话,strcmp是用来比较两个字符串的,我觉得它和qsort很好用,有没有见过其他人用它?谢谢各位。可能会有帮助。“如果我单独传递后缀数组,qsort会将其转换为垃圾”。也许这是因为其他一些问题。例如,strlen(string)+1,strlen(string)+1
。传递*后缀数组
可能不是最好的主意strlen(string)+1,strlen(string)+1
不。qsort
的第三个参数应该是(留作练习)。@ukasz qsort的第一个参数是数组中元素的地址,不是吗?如果我单独通过后缀数组,qsort会将其转换为垃圾。haccks,如果我没弄错的话,strcmp是用来比较两个字符串的,我觉得它和qsort很好用,有没有见过其他人用它?谢谢各位。可能会有帮助。“如果我单独传递后缀数组,qsort会将其转换为垃圾”。也许这是因为其他一些问题。例如,strlen(string)+1,strlen(string)+1
。它可以工作!我理解它,犯了一些愚蠢的错误,第一次与qsort合作,并没有发现我的错误。谢谢!它起作用了!我理解它,犯了一些愚蠢的错误,第一次与qsort合作,并没有发现我的错误。谢谢!