0

我有一个包含无符号字符和位域的结构:

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

4

1 回答 1

1

该结构看起来可能包含大量填充,并且该内存的内容未指定(参见例如这个旧的 SO 答案这个memcmp参考),所以不,你不能真正使用memcmp.

但是,如果您使用 eg 初始化结构,memset那么它应该可以工作。它在技术上未指定,但在实践中memset也应该设置填充。

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

于 2015-06-22T15:09:23.350 回答