为 qsort 实现比较器。如何摆脱这个警告?

Implement comparator for qsort. How to get rid of this warning?

我想知道如何消除以下警告:

   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] != '[=11=]')
    {
      if(isupper(p[index_p]))
         break;
     index_p++;
    }
   ...

我试过转换 pq,但没有成功。

在您的函数中使用(隐式)指针类型转换:

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*) 的参数。您应该做的就是在比较函数中将指针转换为所需的类型。

Qsort 是 C 语言中的一个真正通用的函数,但它使人感到困惑,因为 类型很重要.

比较器的参数应该是(const void*)

如果您正在排序 int,那么您可以简单地转换为 (const int*)
voidint代替了。)

但您似乎正在对 (char*) 进行排序。因此,您需要记住正确转换额外的间接寻址:(const void*)(const (char*)*)(const char**)
voidchar* 代替了。)

我不确定你想用你提供的比较器片段来完成什么,但是