0

我有一个图表,图表的一个参数是一个相等函数。

这是我写的代码:

bool equalityFunction(void *char1,void *char2)
{
    if(strncmp((char *)char1,(char *)char2, 20) == 0)
        return true;
    return false;
}

该函数应该接受结构指针并检查这些指针是否指向具有指向相同字符串的字符指针的结构。

可能难以理解或信息量少,但任何人都可以想到我怎么可能写出equalFunction?谢谢。

4

2 回答 2

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;
}

您不想比较结构本身,而是它们包含指向的字符串。


我建议你不要做不必要的指针转换。它们没有任何用处,可能会隐藏错误,而且阅读起来也不是很好。

于 2014-08-21T10:39:13.173 回答
0

如果要比较指向结构的指针,请使用指向结构的指针作为参数,而不是void*

bool equalityFunction(struct S* s1, struct S* s2)

然后该strncmp函数不适用于比较任意结构,因为它在第一个零字节处停止比较。最好的方法是比较结构中的实际字段:

return s1->field1 == s2->field2 && ...

如果结构上的任何成员无法与==(例如另一个结构或字符串)进行比较,您需要使用适当的比较,但基本原则是 - 比较所有应比较的字段以检查逻辑相等性。

于 2014-08-21T10:39:01.337 回答