比较两个unsigned char结构和位域

时间:2015-06-22 15:01:43

标签: c 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多个成员,它们都是无符号字符或位。

1 个答案:

答案 0 :(得分:1)

结构看起来可能包含大量填充,并且未指定该内存的内容(请参阅例如this old SO answer,以及this memcmp reference),因此,您无法真正使用memcmp

但是,如果用例如初始化结构memset然后应该工作。它在技术上未指定,但在实践中memset也应设置填充。

所以回答你的问题:如果你总是使用memset清除结构,你应该在实践中使用memcmp,但理论上它是未定义的行为。