当前位置:  开发笔记 > 编程语言 > 正文

C不同结构的联盟

如何解决《C不同结构的联盟》经验,为你挑选了0个好方法。

说我有以下结构:

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前面的类型字段.

即使我只访问内存的有效部分,当底层内存不足以容纳整个结构时,利用指向结构的指针是否合法?编辑:如果它对结构无效,它对联盟有效吗?

如果没有,有更好的方法吗?我发现了这个评论,以及它的答案,但是它处理了一个完整大小的结构数组.

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有