所以,我有一个字符串数组(名称输入),我想对该数组进行排序。我使用这样的东西
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
答案 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;
/* ... */
}