对字符串数组进行排序(不区分大小写)。
qsort导致分段错误,可能我的演员阵容不合适。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int compare(const void *string1, const void *string2) {
char *a = (char*)(string1);
char *b = (char*)(string2);
printf("comparing %s AND %s\n", a, b);
return strcasecmp(a,b);
}
void sortListName(char **fileList, int noOfFiles) {
printf("Sorting\n");
qsort(fileList, noOfFiles, 260*sizeof(char), compare);
return;
}
** fileList =字符串数组(文件名)
P.S。 main()很明显,工作正常。
答案 0 :(得分:4)
如果这是您与qsort
相关的所有代码,看起来您声明了comparePtr
函数指针,但它仍未初始化;它并没有指向你的compare
函数(这是我认为你希望它指向的函数)。
之后,还有一些事情:
1)comparePtr
具有正确的类型,但compare
没有。它需要接收两个const void*
,但您有两个const void**
。
2)修复类型后,您可以将compare
传递给qsort
,而不是制作函数指针并传递它。
3)我不相信qsort
的第一个论点是正确的。你想传入指向数组中第一个元素的指针,它应该只是fileList
(我假设它指向数组中的第一个字符串)。
4)第三个论点也不正确。 fileList
是char**
,意味着您传入的是char *
个数组,因此第三个参数应该是sizeof(char*)
,而不是strlen
s弦。
答案 1 :(得分:1)
我会调整一些东西,以便你只是对一个简单的数组进行排序,在这种情况下指向char的指针 - qsort
将安排你获取指向该数组中两个元素的指针(即{{ 1}}指针),需要一些基本的解引用来引导你通过char **
比较“char的指针”。 @Mark可能已经在你看不见的调用代码中泄露了260的来源,但我不是C中那些2d数组的忠实粉丝。
以下函数适用于我,并使用main()示例来练习它。
strcasecmp