我在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等于?
答案 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 ;
您必须使用成员比较才能安全。