检查结构是不是为空[重复]

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;

【讨论】:

以上是关于检查结构是不是为空[重复]的主要内容,如果未能解决你的问题,请参考以下文章

检查数组是不是为空[重复]

React检查Const是不是为空[重复]

检查 JSON 响应数据是不是为空 [重复]

检查数组是不是为空,因此禁用按钮[重复]

使用jQuery检查值是不是为空[重复]

检查返回的值是不是为空[重复]