【问题标题】:How to get the size of a struct within a union in C?如何在 C 中的联合中获取结构的大小?
【发布时间】:2015-12-16 16:21:20
【问题描述】:

如何在 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) 将提供联合的最大大小,在这种情况下,它将是 5,因为 rsp_ 大于 req_

你如何获得sizeof(req_)

【问题讨论】:

    标签: c data-structures struct sizeof unions


    【解决方案1】:

    像这样:

    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
    

    【讨论】:

    • 啊啊啊,我知道这很简单。谢谢。
    【解决方案2】:

    req_ 是一个结构标签。您需要将struct 与它放在一起

    size_t size = sizeof(struct req_);
    

    或者使用声明的struct变量

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-13
      • 2020-11-17
      • 1970-01-01
      • 2018-12-28
      • 1970-01-01
      相关资源
      最近更新 更多