簡體   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