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 に答える