我有一个图表,图表中的一个参数是一个相等函数。
这是我写的代码:
bool equalityFunction(void *char1,void *char2)
{
if(strncmp((char *)char1,(char *)char2, 20) == 0)
return true;
return false;
}
该函数应该接受结构指针并检查这些指针是否指向具有指向相同字符串的charpointers的结构。
可能很难理解或信息不足但是有人能想到我怎么可能写出equalityFunction吗? 感谢。
答案 0 :(得分:2)
如果equalityFunction
的参数是结构指针,则应将它们视为:
bool equalityFunction(void *struct1_, void *struct2_)
{
struct someStruct *struct1 = struct1_;
struct someStruct *struct2 = struct2_;
if(strncmp(struct1->string, struct2->string, 20) == 0)
return true;
return false;
}
你不想比较结构本身,而是它们包含指针的字符串。
我建议你不要做不必要的指针演员。它们没有任何用处,可能隐藏错误,并且不太好阅读。
答案 1 :(得分:0)
如果要比较指向结构的指针,请使用指向结构的指针作为参数,而不是void*
:
bool equalityFunction(struct S* s1, struct S* s2)
然后strncmp
函数不适合比较任意结构,因为它在第一个零字节处停止比较。最好的方法是比较结构中的实际字段:
return s1->field1 == s2->field2 && ...
如果结构上的任何成员无法与==
(例如另一个结构或字符串)进行比较,则需要使用适当的比较,但基本原则是 - 比较所有应与之比较的字段检查逻辑相等。