如何比较struct的两个实例

时间:2012-10-29 18:44:50

标签: c struct

  

可能重复:
  How do you compare structs for equality in C?

我在C中有一个结构:

typedef struct Value
{
    int value1;
    int value2;
    int value3;
}myValue;

myValue valueA;
myValue valueB;

valueA.value1 = 1;
valueA.value2 = 2;
valueA.value3 = 3;

valueB.value1 = 1;
valueB.value2 = 2;
valueB.value3 = 3;

如何比较这些valueA和valueB等于?

2 个答案:

答案 0 :(得分:2)

您唯一安全的选择是按成员比较成员。

由于结构成员之间未指定值的填充,您无法使用memcmp来比较结构对象。

等于运算符==不适用于结构类型的操作数。

答案 1 :(得分:1)

由于结构中字段之间存在潜在的随机填充字符,因此无法使用memcmp来比较结构的相等性。

// bad
  memcmp(&struct1, &struct2, sizeof(struct1));

对于像这样的结构,上面的内容会失败:

typedef struct Foo {
  char a;
  /* padding */
  double d;
  /* padding */
  char e;
  /* padding */
  int f;
} Foo ;

您必须使用成员比较才能安全。