我有以下结构
typedef struct
{
char data1[10];
char data2[10];
AnotherStruct stData;
}MyData;
出于某种原因,实现者选择不将 stData 作为指针,所以我必须忍受它。我的问题是如何检查 stData 成员是否为空?因为如果它是空的,我需要跳过我的代码中的某些内容。
任何帮助表示赞赏
原文由 user2101801 发布,翻译遵循 CC BY-SA 4.0 许可协议
您需要一些方法来标记
AnotherStruct stData
为空。首先检查(或仔细检查)与
AnotherStruct
相关的文档和评论,可能会询问制作它的人是否可用,以了解是否有官方方法可以做你想做的事。也许该结构有一个指针,如果它是空指针,则该结构为空。或者也许有一个整数字段,其中 0 或 -1 或其他东西可能意味着空。甚至是一个布尔字段来标记它为空。
如果没有上述任何一项,也许您可以添加这样一个字段,或者对某个字段进行这样的解释。
如果上述方法失败,请在
MyData
中添加一个布尔字段,以判断stData
是否为空。您还可以解释
data1
和/或data2
的一些值(如空字符串?充满 0xFF 字节?),表示为空stData
。如果您无法修改或重新解释任一结构的内容,那么您可以将空项目和非空项目放在不同的容器中(数组、列表,无论您拥有什么)。如果
MyData
项目是从堆中一一分配的,那么这本质上与拥有 一个空闲列表 相同。上述变化,如果您在一个容器中混合了空和非空项目,那么您可以拥有另一个容器,其中包含指向非空项目(或空项目,或任何适合您的需要)的 指针 或索引.这有一个额外的复杂性,您需要保持两个容器同步,这可能是微不足道的,也可能不是微不足道的。