gpt4 book ai didi

初始化时的 C 结构填充

转载 作者:太空狗 更新时间:2023-10-29 16:13:12 25 4
gpt4 key购买 nike

我有一个结构,例如

typedef struct
{
int a; // Let's say this ends up being 4 bytes
int b; // 4 bytes
char text[10]; // 10 bytes
} blah_t;

static blah_t myvar;
  1. 假设 blah_t 中字段大小的总和为 18 个字节,但由于填充,sizeof(blah_t) 为 20。
  2. myvar 是静态的,因此它将被零初始化。

问题:

  1. 对于静态变量,填充字节 19 和 20 是否保证为 0?如果不是,我需要执行 memset(&myvar, 0, sizeof(blah_t)) 以使结构的任何 memcmp 有效——即使对于静态变量也是如此。
  2. calloc(1, sizeof(blah_t)) 怎么样?字节 19 和 20 是否保证为零? 我相信是这种情况。

最佳答案

根据 ISO C99 标准:“当值存储在结构或 union 类型的对象中时,包括在成员对象中,对象表示中与任何填充字节对应的字节采用未指定的值。”

进一步看,这似乎是在讨论一些额外的问题: Comparing structures in C vs C++

编辑:不是这个问题本身的重复,而是许多常见问题的详细回答。

关于初始化时的 C 结构填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15374606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com