請問如何判斷兩個struct是否相等? |
答題得分者是:maomfh
|
tsostony
一般會員 發表:2 回覆:1 積分:0 註冊:2008-07-16 發送簡訊給我 |
|
boss.tw
高階會員 發表:15 回覆:109 積分:194 註冊:2005-05-17 發送簡訊給我 |
|
maomfh
初階會員 發表:3 回覆:10 積分:27 註冊:2008-01-05 發送簡訊給我 |
可以使用memcmp 比較兩個struct 的內容即可.
typedef _MyStruct { int id; char name[8]; } MyStruct; MyStruct Struct1, Struct2; // do sometime // compare Struct1 and Struct2 if ( memcpy ( &Struct1, &Struct2 , sizeof(struct1)) { // Stuct1 != Sturct2 } else { // Struct1 == Struct2 }
------
Maomfh |
tsostony
一般會員 發表:2 回覆:1 積分:0 註冊:2008-07-16 發送簡訊給我 |
|
boss.tw
高階會員 發表:15 回覆:109 積分:194 註冊:2005-05-17 發送簡訊給我 |
好像不可行
[code cpp] struct MyStruct { int id; char *name; } ; MyStruct Struct1={0}, Struct2={0}; Struct1.id =1; Struct1.name = "test1"; Struct2.id =2; Struct2.name = "test2"; if ( memcpy ( &Struct1, &Struct2 , sizeof(Struct1) ) ){ int ttt =0; //不管 struct1 id and name 是否跟 struct2 一樣,看起來永遠進這裡 // Stuct1 != Sturct2 } else { int ttt =0; // Struct1 == Struct2 } [/code]
編輯記錄
boss.tw 重新編輯於 2009-04-06 01:15:38, 註解 無‧
|
ikk
尊榮會員 發表:4 回覆:413 積分:768 註冊:2003-06-30 發送簡訊給我 |
|
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
當然不行。
要用這招之前,你要有良好的程式習慣。 就是要自己在取得空間後,要去把它 init 否則。對於字串來說是以 '\0' 就結束了。 但是以空間來說。是以 array size 為結束。 比對結果,自然就會不一樣了。 ===================引 用 boss.tw 文 章=================== 好像不可行 [code cpp] struct MyStruct { int id; char *name; } ; MyStruct Struct1={0}, Struct2={0}; Struct1.id =1; Struct1.name = "test1"; Struct2.id =2; Struct2.name = "test2"; if ( memcpy ( &Struct1, &Struct2 , sizeof(Struct1) ) ){ int ttt =0; //不管 struct1 id and name 是否跟 struct2 一樣,看起來永遠進這裡 // Stuct1 != Sturct2 } else { int ttt =0; // Struct1 == Struct2 } [/code] |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
忍不住也要來插花了!! 除了memcpy 是筆誤外(應該是memcmp),還有一個超大的重點:
你的struct裡放的是一個指標,是放記憶體的位址,怎可能二個位址是會一樣呢?? 所以,永遠都不會等於的啦!!! 若要比較字串裡的內容,就乖乖的取值出來比對吧!! 除非你改成 char name[256] 之類的! 了不?? 補充一下: 暗黑說的應該是指當struct內宣告char name[256]之類的情形,這樣是可以比,但要注意256bytes要先init,才不易出錯! ===================引 用 boss.tw 文 章=================== 好像不可行 [code cpp] struct MyStruct { int id; char *name; } ; MyStruct Struct1={0}, Struct2={0}; Struct1.id =1; Struct1.name = "test1"; Struct2.id =2; Struct2.name = "test2"; if ( memcpy ( &Struct1, &Struct2 , sizeof(Struct1) ) ){ int ttt =0; //不管 struct1 id and name 是否跟 struct2 一樣,看起來永遠進這裡 // Stuct1 != Sturct2 } else { int ttt =0; // Struct1 == Struct2 } [/code]
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan
編輯記錄
aftcast 重新編輯於 2009-04-06 13:20:58, 註解 無‧
|
boss.tw
高階會員 發表:15 回覆:109 積分:194 註冊:2005-05-17 發送簡訊給我 |
小弟不才,感謝賜教
問題出在 aftcast 說的地方,非 init [code cpp] MyStruct Struct1={0}, Struct2={0}; Struct1.id =2; strcpy(Struct1.name, "test2"); //Struct1.name = "test2\0"; Struct2.id =2; strcpy(Struct2.name, "test2"); //Struct2.name = "test2\0"; if ( memcmp ( &Struct1, &Struct2 , sizeof(Struct1) ) ){ int ttt =0; // Stuct1 != Sturct2 } else { int ttt =0; // Struct1 == Struct2 } [/code]
編輯記錄
boss.tw 重新編輯於 2009-04-06 13:08:03, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |