【问题标题】:Compare two unsigned char structures and bitfields比较两个无符号字符结构和位域
【发布时间】:2015-09-08 02:31:48
【问题描述】:

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

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

【问题讨论】:

  • 在位域结构上使用memcmp 是安全的,只是在任何其他类型的数据(变量、数组、“普通”结构、静态分配或动态)。只要您传递给memcmplength 参数不使其超出任一输入内存块的范围,它就应该可以正常工作。

标签: c memcmp


【解决方案1】:

该结构看起来可能包含大量填充,并且该内存的内容未指定(参见例如this old SO answer,还有this memcmp reference),所以不,你不能真正使用memcmp

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

所以回答您的问题:如果您总是使用 memset 清除结构,那么实际上您应该可以使用 memcmp,但理论上这是未定义的行为。

【讨论】:

  • 谢谢我刚刚重载了 == 运算符并以安全的方式进行操作。
猜你喜欢
  • 2019-07-11
  • 2014-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多