gpt4 book ai didi

C : Incorrect sizeof calculation of nested structure

转载 作者:太空宇宙 更新时间:2023-11-04 01:00:00 26 4
gpt4 key购买 nike

我在计算 C 中嵌套结构的大小时遇到​​了问题。我正在使用属性包来不允许填充。

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>

typedef struct __attribute__((packed)) {
uint32_t x; // 4bytes
uint32_t y; // 4bytes
} bar_t; // total 8bytes

typedef struct __attribute__((packed)) {
uint8_t a; // 1bytes
uint16_t b; // 2bytes
uint8_t c; // 1bytes
uint8_t d; // 1bytes
uint8_t e; // 1bytes
uint8_t f; // 1bytes
uint8_t g; // 1bytes
uint32_t h; // 4bytes
bar_t bar[0]; // 8bytes
} foo_t; //total 20bytes = 0x14

int main() {
foo_t *foo = malloc(sizeof(foo_t));
printf("sizeof foo 0x%lX sizeof foo_t 0x%lX sizeof bar_t 0x%lX\n", \
sizeof(foo), sizeof(foo_t), sizeof(bar_t));
return 0;
}

输出:

sizeof foo 0x8  sizeof foo_t 0xC  sizeof bar_t 0x8

我希望结果是

sizeof foo 0x14  sizeof foo_t 0x14  sizeof bar_t 0x8

这里有什么问题吗?

最佳答案

零长度数组不占用任何空间。它实际上只是指向对象末尾的指针。如果条目多于零,则必须分配额外空间。

foo是一个指针。我不知道为什么您希望指针为 20 个字节,但在您的平台上指针显然是 8 个字节。

关于C : Incorrect sizeof calculation of nested structure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44192354/

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