检查结构是不是为空[重复]
Posted
技术标签:
【中文标题】检查结构是不是为空[重复]【英文标题】:Check if a struct is empty [duplicate]检查结构是否为空[重复] 【发布时间】:2021-11-26 09:19:16 【问题描述】:我有一段旧代码,结构很大,如下所示:
typedef struct
long test1;
char test2[10]
…
teststruct;
这个结构被初始化如下:
memset(teststruct, 0, sizeof(teststruct0));
我不得以任何方式更改此代码。如何有效地检查结构是否为空,或者在memset()
之后被修改?
【问题讨论】:
“空”是什么意思?它有成员变量,所以不能为空。您的意思是检查所有值是否仍设置为 0? 如果您在结构中设置了一些值,是否有一个布尔标志设置为 true?如果这不可能,memcmp
的结构是“空的”?
“结构为空”是什么意思
您可以memcmp
使用相同大小的零数组。
为什么是memset
?顺便说一句,teststruct
不是一个实例。这是一个 type 所以memset(teststruct, 0, sizeof(teststruct));
是完全错误的。
【参考方案1】:
听起来你想要找出这个结构是否有任何非零值。正如您在 cmets 中看到的,您可能需要考虑一些例外情况,但对于简单的解决方案,我们可以复制此 previous answer。
// Checks if all bytes in a teststruct are zero
bool is_empty(teststruct *data)
unsigned char *mm = (unsigned char*) data;
return (*mm == 0) && memcmp(mm, mm + 1, sizeof(teststruct) - 1) == 0;
【讨论】:
以上是关于检查结构是不是为空[重复]的主要内容,如果未能解决你的问题,请参考以下文章