c++ - 如何在 C 或 C++ 中检查结构是否为 NULL

标签 c++ c data-structures

我有以下结构

typedef struct 
{
   char      data1[10];
   char      data2[10];
   AnotherStruct  stData;
}MyData;

由于某种原因,实现者选择不将 stData 作为指针,所以我不得不忍受。 我的问题是如何检查 stData 成员是否为空?因为如果它是空的,我需要跳过代码中的某些内容。

感谢任何帮助

最佳答案

您需要一些方法将 AnotherStruct stData 标记为空。

  • 首先检查(或复查)与 AnotherStruct 相关的文档和注释,可能会询问制作它的人是否可用,以了解是否有官方方法做你想做的。

  • 也许那个struct有一个指针,如果是空指针,这个struct就是空的。或者也许有一个整数字段,其中 0 或 -1 或其他东西可能意味着空。甚至是一个 bool 字段来标记它为空。

  • 如果以上都没有,也许你可以添加这样一个字段,或者对某个字段进行这样的解释。

  • 如果上述失败,在 MyData 中添加一个 bool 字段来判断 stData 是否为空。

  • 您还可以解释 data1 和/或 data2 的一些值(例如,空字符串?充满 0xFF 字节?)表示空 stData .

  • 如果你不能修改或重新解释任一结构的内容,那么你可以将空和非空项目放在不同的容器中(数组、列表,无论你有什么)。如果 MyData 项是从堆中一一分配的,那么这本质上与 a free list 相同。 .

  • 上面的变化,如果你有空和非空项目都混合在一个容器中,那么你可以有另一个容器与 指针 或非空项目的索引(或空元素,或任何适合您需要的东西)。这有一个额外的复杂性,您需要使两个容器保持同步,这可能是微不足道的,也可能不是微不足道的。

关于c++ - 如何在 C 或 C++ 中检查结构是否为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25904993/

相关文章:

c++ - std::set 带有自定义比较器的操作

python - 检测停止进程Python

c - 理解c代码有困难

mysql - 多级类别的数据库结构(最佳方法)

c++ - 可以realloc Array,那为什么要用指针呢?

c++ - 双向链表 C++ 在第三个节点后崩溃

c++ - Xcode 显示 C++ 继承的 "Use of undeclared Identifier"错误

c++ - assert() 意外触发时如何抑制 Google 测试中的终止?

包含给定三元字符串的一个或两个字符的连续子字符串

database - HyperLogLog 算法如何工作?