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_;)