为什么这个qsort()不起作用?

时间:2013-08-22 22:18:49

标签: c string sorting pointers qsort

对字符串数组进行排序(不区分大小写)。

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()很明显,工作正常。

2 个答案:

答案 0 :(得分:4)

如果这是您与qsort相关的所有代码,看起来您声明了comparePtr函数指针,但它仍未初始化;它并没有指向你的compare函数(这是我认为你希望它指向的函数)。

之后,还有一些事情:

1)comparePtr具有正确的类型,但compare没有。它需要接收两个const void*,但您有两个const void**
2)修复类型后,您可以将compare传递给qsort,而不是制作函数指针并传递它。
3)我不相信qsort的第一个论点是正确的。你想传入指向数组中第一个元素的指针,它应该只是fileList(我假设它指向数组中的第一个字符串)。
4)第三个论点也不正确。 fileListchar**,意味着您传入的是char *个数组,因此第三个参数应该是sizeof(char*),而不是strlen s弦。

答案 1 :(得分:1)

我会调整一些东西,以便你只是对一个简单的数组进行排序,在这种情况下指向char的指针 - qsort将安排你获取指向该数组中两个元素的指针(即{{ 1}}指针),需要一些基本的解引用来引导你通过char **比较“char的指针”。 @Mark可能已经在你看不见的调用代码中泄露了260的来源,但我不是C中那些2d数组的忠实粉丝。

以下函数适用于我,并使用main()示例来练习它。

strcasecmp