2014-11-21 75 views
0

我做一個bcmp(&v6_addr1,&v6_addr2,sizeof(v6_addr1))BCMP()返回1,儘管塊類似於

(gdb) p v6_addr2 
$15 = {u = {b = "0\001", '\000' <repeats 12 times>, "\002\061", w = {304, 0, 
     0, 0, 0, 0, 0, 12546}, l = {304, 0, 0, 822214656}}} 

(gdb) p v6_addr1 
$16 = {u = {b = "0\001", '\000' <repeats 12 times>, "\002\061", w = {304, 0, 
     0, 0, 0, 0, 0, 12546}, l = {304, 0, 0, 822214656}}} 

(gdb) p bcmp(&v6_addr1,&v6_addr2,sizeof(v6_addr1)) 
$18 = 1 

塊似乎是在gdb相同

但BCMP返回值是1 ..可能是什麼原因?

回答

0

如果struct包含填充,則這些位置的值可能會有所不同。如果您檢查這些值,則這不會顯示在調試器中,因爲它只顯示值。

您可以通過examining驗證實際的存儲器內容。

不要bcmp。從手動:

的BCMP()函數比較兩個字節序列 s1和s2長度n各自的。

解決的辦法請參閱本:How do you compare structs for equality in C?

相關問題