gpt4 book ai didi

c - 为什么结构体多了 3 个字节?可以去掉吗?

转载 作者:行者123 更新时间:2023-11-30 15:21:32 25 4
gpt4 key购买 nike

struct things {
char foo[25];
int bar;
};

struct morethings {
char morefoo[25];
int morebar;
int another;
};

int main() {
printf("char[25] + int: %d | struct things: %d\n\n", sizeof(char[25]) + sizeof(int), sizeof(struct things));
printf("char[25] + int + int: %d | struct morethings: %d\n\n", sizeof(char[25]) + sizeof(int) + sizeof(int), sizeof(struct morethings));

return 0;
}

返回:

char[25] + int: 29 | struct things: 32

char[25] + int + int: 33 | struct morethings: 36

我相信 sizeof 的返回值在两种情况下应该是相同的,但结构体总是有最多 3 个字节。为什么会出现这种情况?

可以删除吗?这可能会扰乱我正在做的事情,即保存在文件结构中。

最佳答案

这取决于您使用的编译器,您需要类似的东西

#pragma pack(push) 
struct things
{
char foo[25];
int bar;
};
#pragma pack(pop).

查看这些链接以获取更多信息

  1. GNU 编译器 gcc
  2. 微软编译器 MSDN

还有一个gcc特定的解决方案,它是

struct __attribute__ ((__packed__)) things 
{
char foo[25];
int bar;
};

关于c - 为什么结构体多了 3 个字节?可以去掉吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29549998/

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