【问题标题】:bcmp() returns 1 though the blocks are similarbcmp() 虽然块相似但返回 1
【发布时间】:2014-11-21 09:54:13
【问题描述】:

我正在做一个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.. 可能是什么原因??

【问题讨论】:

    标签: c compare


    【解决方案1】:

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

    您可以通过examining 实际内存内容来验证这一点。

    不要bcmp。来自手册:

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

    查看此解决方案:How do you compare structs for equality in C?

    【讨论】:

      猜你喜欢
      • 2023-03-06
      • 2011-07-22
      • 1970-01-01
      • 1970-01-01
      • 2019-08-21
      • 1970-01-01
      • 1970-01-01
      • 2013-05-11
      • 1970-01-01
      相关资源
      最近更新 更多