[英]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.