我想知道如何摆脱以下警告:
kwic1.c:118:48: warning: incompatible pointer types passing 'int (const char *,
const char *)' to parameter of type 'int (* _Nonnull)(const void *, const
void *)' [-Wincompatible-pointer-types]
我正在为qsort实现一个比较器。这是我的功能
int comparator(const char *p, const char *q)
{
int index_p = 0;
int index_q = 0;
while(p[index_p] != '\0')
{
if(isupper(p[index_p]))
break;
index_p++;
}
...
我尝试过投放p
和q
,但它没有用。
答案 0 :(得分:2)
在函数中使用(隐式)指针类型转换:
int comparator(const void *p1, const void *q1){
const char *p = p1, *q = q1;
// The rest of the code requires no change
函数原型在作为函数指针传递时完全匹配很重要。即,您不能将int (*)(const char*, const char*)
函数指针传递给int (*)(const void*, const void*)
参数。您应该做的就是将指针转换为比较函数中的所需类型。
答案 1 :(得分:-1)
Qsort在C中是一个真正的通用函数,但由于 类型很重要 ,它会引起人们的兴趣。
比较者的论据应该是(const void*)
。
如果您要排序int
,那么您可以简单地转换为(const int*)
。
(void
替换为int
。)
但看起来你正在排序(char*)
。因此,您需要记住正确地施放额外的间接:(const void*)
→(const (char*)*)
→(const char**)
。
(void
替换为char*
。)
我不确定你要用你提供的比较器片段来完成什么,但是 Here is an example of qsort()ing c-strings.