比较两个无符号字符结构和位域

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

最佳答案

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

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

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

关于比较两个无符号字符结构和位域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30983353/

相关文章:

c - 使用 ansi c 将对象存储在数组中?

java - 相当于Java中的memcmp()?

具有 char 成员的结构的自定义 memcmp()

使用 memcmp() 和指针算法比较 C 中的结构

c - 函数未初始化

c - 如何在 C 中取消声明(删除)变量?

c - 如何解决我的小写函数遇到的这个问题

c++ - 如何比较 C++ 中的泛型结构?

c - Memcmp 用于两个具有不同数据的指针

c - 增加二进制可执行文件的大小