与qsort方法混淆错误

时间:2013-02-21 00:48:33

标签: c

所以,我有一个字符串数组(名称输入),我想对该数组进行排序。我使用这样的东西

int stringLen = sizeof(input)/sizeof(char *);
qsort(input, stringLen, sizeof(char *), myCompare);

但是我遇到了这个令人困惑的错误:

error: invalid conversion from 'int (*)(const char*, const char*)' to '__compar_fn_t {aka int (*)(const void*, const void*)}' [-fpermissive]
     

在srot13u.c中包含的文件中:5:0:   /usr/include/stdlib.h:761:13:错误:初始化'void qsort(void *,size_t,size_t,__ compar_fn_t)'[-fpermissive]

的参数4

3 个答案:

答案 0 :(得分:1)

您的myCompare功能有签名:

int myCompare(const char*, const char*)

但是

int myCompare(const void*, const void*)
预计

只需使用

int myCompare(const void *a_, const void *b_) {
    const char *a = a_;
    const char *b = b_;
    ...
}

答案 1 :(得分:1)

你传递的函数有两个char指针,但是qsort想要一个需要void指针的函数。这两个函数指针类型在C中兼容。

更改比较例程;常见的设置类似于

static int strcmp_void(const void *a, const void *b)
{
    return strcmp(a, b);  // the types *are* compatible in this expression
}

答案 2 :(得分:0)

像这样更改myCompare

int myCompare(const void* pa, const void* pb) {
   const char *a = (const char*)pa;
   const char *b = (const char*)pb;

   /* ... */
}