我正在做一个bcmp(&v6_addr1,&v6_addr2,sizeof(v6_addr1))

(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.。可能是什么原因?

最佳答案

如果该结构包含填充,则这些位置的值可能会有所不同。如果您检查这些值,它将不会在调试器中显示,因为它仅显示值。

您可以通过examining实际内存内容进行验证。

不要bcmp。从手册中:


  bcmp()函数比较长度为n的两个字节序列s1和s2。


请参阅此以获取解决方案:How do you compare structs for equality in C?

关于c - 尽管块相似,但bcmp()返回1,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27058544/

10-08 20:30