如何在C中的联合中获取结构的大小?

时间:2015-12-16 16:21:21

标签: c data-structures struct sizeof unions

如何在C中的联合中获得结构的大小?

给出以下定义:

typedef union
{
    struct req_
    {
        uint8_t cmd1;
        uint8_t cmd2;
    } req;

    struct rsp_
    {
        uint8_t cmd_result;
        uint8_t status_1;
        uint8_t status_2;
        uint8_t status_3;
        uint8_t status_4;
    } rsp;
} msg_t;

sizeof(msg_t)将提供联合的最大大小,在这种情况下,rsp_大于req_时将为5。

你如何得到sizeof(req_)

2 个答案:

答案 0 :(得分:4)

像这样:

sizeof(struct req_);

例如:

int main()
{
    printf("sizeof msg_t=%zd\n",sizeof(msg_t));
    printf("sizeof struct req_=%zd\n",sizeof(struct req_));
}

输出:

sizeof msg_t=5
sizeof struct req_=2

答案 1 :(得分:0)

req_是结构标记。您需要将struct加上

size_t size = sizeof(struct req_);

或使用声明的结构变量

size_t size = sizeof(msg_t.req_.req);