C 具有结构指针的相等函数

C 具有结构指针的相等函数,c,pointers,struct,char-pointer,C,Pointers,Struct,Char Pointer,我有一个图,图的一个参数是等式函数 这是我写的代码: bool equalityFunction(void *char1,void *char2) { if(strncmp((char *)char1,(char *)char2, 20) == 0) return true; return false; } 函数应该接受结构指针,并检查这些指针是否指向具有指向相同字符串的CharPointer的结构 可能很难理解或信息量很低,但有人能想到我如何编写equalit

我有一个图,图的一个参数是等式函数

这是我写的代码:

bool equalityFunction(void *char1,void *char2)
{
    if(strncmp((char *)char1,(char *)char2, 20) == 0)
        return true;
    return false;
}
函数应该接受结构指针,并检查这些指针是否指向具有指向相同字符串的CharPointer的结构

可能很难理解或信息量很低,但有人能想到我如何编写equalityFunction吗?
谢谢。

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

bool equalityFunction(struct S* s1, struct S* s2)
然后,
strncmp
函数不适合比较任意结构,因为它在第一个零字节处停止比较。最好的方法是比较结构中的实际字段:

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

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

如果
相等函数的参数是结构指针,你应该这样对待他们:

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;
}
您不希望比较结构本身,而是比较它们包含指针的字符串



我建议你不要做不必要的指针投射。它们没有任何用处,可能会隐藏错误,并且不太好阅读。

内存映像中的结构可能无法检查,因为它包含填充。我尝试使用您编写的内容,但出现以下错误:取消引用指向不完整类型的指针。我使用的结构如下所示:typedef结构{bool aBool;char*aChar;}结构;然后你应该使用你的结构,我只是选择了一些虚拟名称,因为我不知道你的…
theStruct*struct1=struct1等等。等等,你写了
struct theStruct*struct1=struct1?这不同于结构1…
。是的,我就是这么做的。。。我总算弄错了。我现在可以使用了,谢谢。(这条消息指的是你在这里的第一条评论。是的,我写了这个结构*struct1=struct1_;)