繁体   English   中英

具有结构指针的相等函数

[英]Equality function with struct pointers

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

这是我编写的代码:

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

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

可能很难理解或信息不足,但是任何人都可以想到我怎么可以编写equityFunction吗? 谢谢。

如果参数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;
}

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


而且我建议您不要进行不必要的指针强制转换。 它们没有任何用处,可能会隐藏错误,并且阅读起来并不好。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM