0

可能重复:
如何比较 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 是否相等?

4

2 回答 2

2

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

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

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

于 2012-10-29T18:45:58.200 回答
1

由于结构中的字段之间可能存在随机填充字符,因此您不能使用 memcmp 来比较结构是否相等。

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

对于这样的结构,上述内容将失败:

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

为了安全起见,您必须使用成员比较。

于 2012-10-29T18:48:04.870 回答