比较两个 unsigned char 结构和位域
Compare two unsigned char structures and bitfields
我有一个包含无符号字符和位域的结构:
struct {
unsigned char byt1 ;
unsigned char var1 :1;
unsigned char byt2 ;
unsigned char var2 :1;
unsigned char var3 :1;
unsigned char var4 :1:
} struct1;
我想将此结构与其自身进行比较。我保留了这个结构的两个副本,我只想检查与第一个副本相比是否有任何变化。
在这里使用 memcmp() 安全吗?真正的结构体有50+个成员,而且都是unsigned chars or bits.
该结构看起来可能包含大量填充,并且该内存的内容未指定(参见 this old SO answer, and also this memcmp
reference),所以不,您不能真正使用 memcmp
.
但是,如果您使用例如初始化结构memset
那么它 应该 工作。它在技术上未指定,但实际上 memset
也应该设置填充。
所以回答你的问题:如果你总是使用 memset
清除结构,你在实践中应该可以使用 memcmp
,但理论上它是未定义的行为。
我有一个包含无符号字符和位域的结构:
struct {
unsigned char byt1 ;
unsigned char var1 :1;
unsigned char byt2 ;
unsigned char var2 :1;
unsigned char var3 :1;
unsigned char var4 :1:
} struct1;
我想将此结构与其自身进行比较。我保留了这个结构的两个副本,我只想检查与第一个副本相比是否有任何变化。
在这里使用 memcmp() 安全吗?真正的结构体有50+个成员,而且都是unsigned chars or bits.
该结构看起来可能包含大量填充,并且该内存的内容未指定(参见 this old SO answer, and also this memcmp
reference),所以不,您不能真正使用 memcmp
.
但是,如果您使用例如初始化结构memset
那么它 应该 工作。它在技术上未指定,但实际上 memset
也应该设置填充。
所以回答你的问题:如果你总是使用 memset
清除结构,你在实践中应该可以使用 memcmp
,但理论上它是未定义的行为。