【发布时间】:2021-11-23 23:27:55
【问题描述】:
我在这里有这行代码,我试图将两个 void 参数类型转换为字符串,然后使用 strcmp 函数比较两者:
int compareFirstName(const void * p1, const void * p2)
{
const char **str1, **str2;
str1 = (char **) &p1;
str2 = (char **) &p2;
return strcmp(*str1, *str2);
}
但是,我不断收到错误,
assignment from incompatible pointer type [-Werror]
str1 = (char **) &p1;
^
我很确定我选对了,所以我不知道问题出在哪里。之前,我遇到了分段错误,但解决了,现在卡在这里。
编辑: 这是我用来比较名字、IDS 和姓氏的结构。原来我必须将 void * 转换为 Student *,我对此有点困惑
typedef struct
{
int ID;
char firstname[NAME_LENGTH] ;
char lastname[NAME_LENGTH] ;
} Student;
【问题讨论】:
-
请说明您使用此比较功能的目的。在我看来,您似乎想将其用于
qsort或类似的东西。 -
是的,它将与结构一起用于 qsort
-
那么你仍然不需要双指针。只需将
p1和p2移动到两个Student*指针(s1和s2)然后return strcmp(s1->firstname, s2->firstname);。但这确实是 0___________ 给出的答案(编辑后稍作修改)。 -
这个函数的目的是什么?比较两个给定对象或所有元素的特定元素?用例是什么?