【问题标题】: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)); 是完全错误的。

标签: c++ memset


【解决方案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;
}

【讨论】:

    猜你喜欢
    • 2014-02-11
    • 2013-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 2021-08-12
    • 2018-04-18
    • 2022-01-20
    相关资源
    最近更新 更多