检查结构是否为空
Check if a struct is empty
我有一段旧代码,其中包含一个大结构,如下所示:
typedef struct {
long test1;
char test2[10]
…
} teststruct;
这个结构像这样初始化:
memset(teststruct, 0, sizeof(teststruct0));
我不能以任何方式更改此代码。如何有效地检查结构是否为空,或者在 memset()
?
之后是否已被修改
听起来你想要的是查明这个结构是否有任何非零值。正如您在评论中看到的,您可能需要考虑一些例外情况,但对于简单的解决方案,我们可以复制此 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;
}
我有一段旧代码,其中包含一个大结构,如下所示:
typedef struct {
long test1;
char test2[10]
…
} teststruct;
这个结构像这样初始化:
memset(teststruct, 0, sizeof(teststruct0));
我不能以任何方式更改此代码。如何有效地检查结构是否为空,或者在 memset()
?
听起来你想要的是查明这个结构是否有任何非零值。正如您在评论中看到的,您可能需要考虑一些例外情况,但对于简单的解决方案,我们可以复制此 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;
}