为 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++;
}
...
我试过转换 p
和 q
,但没有成功。
在您的函数中使用(隐式)指针类型转换:
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*)
。
(void
被int
代替了。)
但您似乎正在对 (char*)
进行排序。因此,您需要记住正确转换额外的间接寻址:(const void*)
→ (const (char*)*)
→ (const char**)
。
(void
被 char*
代替了。)
我不确定你想用你提供的比较器片段来完成什么,但是
我想知道如何消除以下警告:
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++;
}
...
我试过转换 p
和 q
,但没有成功。
在您的函数中使用(隐式)指针类型转换:
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*)
。
(void
被int
代替了。)
但您似乎正在对 (char*)
进行排序。因此,您需要记住正确转换额外的间接寻址:(const void*)
→ (const (char*)*)
→ (const char**)
。
(void
被 char*
代替了。)
我不确定你想用你提供的比较器片段来完成什么,但是