说我有以下结构:
struct StructA { int some_member; double some_other_member; }; struct StructB { char a_char; char another_char; };
现在说我在内存中有一些包含这些结构的缓冲区,我想解析它.缓冲区中的每个结构前面都有一个int
描述结构类型的结构.像这样:
struct Descriptor { int type; union { struct StructA a; struct StructB b; } data; };
我想做的是将指针转换为buffer(char *
)struct Descriptor *
,读取类型,然后访问union的正确成员,然后按类型成员的大小+正确联合的大小推进指针成员(例如sizeof(int) + sizeof(struct StructA)
).
但是,这是有效的C代码吗?(从某种意义上说,它不会调用未定义的行为.)我主要担心的是内存缓冲区可能小于sizeof(struct Descriptor)
因为它只包含StructB
前面的类型字段.
即使我只访问内存的有效部分,当底层内存不足以容纳整个结构时,利用指向结构的指针是否合法?编辑:如果它对结构无效,它对联盟有效吗?
如果没有,有更好的方法吗?我发现了这个评论,以及它的答案,但是它处理了一个完整大小的结构数组.