我正在做一个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/