gpt4 book ai didi

c - 用另一个结构的内容初始化一个结构

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

假设我有一个结构类型:

typedef struct
{
int a;
int b[3];
int c;
} __attribute__((packed)) foo_t;

然后我这样初始化:

foo_t first = { 1, { 2, 3, 4 }, 5 };

现在我想创建第二个结构,它是第一个结构的子集:

typedef struct
{
int b[3];
int c;
} __attribute__((packed)) bar_t;

bar_t second = { first.b[3], first.c }; //this should define first.c as 5
memcpy(second.b, first.b, 3 * sizeof(int));

如果我在 second 中打印每个变量的值,则数组 b 定义正确,但 c 仅为 0。

printf("%d %d %d %d\n", second.b[0], second.b[1], second.b[2], second.c);

输出

2 3 4 0

为什么 second.c 没有被正确填充?

最佳答案

在发布后几秒钟就回答了我自己的问题。

为了用数组初始化新结构的内容,您必须将数组部分放在花括号中。此外,将 first.b[3] 指定为初始化值实际上会获取 3 元素数组的第 4 个元素,这是未定义的错误代码。 {0} 可用作任何任意大小数组的占位符,直到在下一行使用 memcpy。所以正确的代码段应该是这样的:

typedef struct
{
int b[3];
int c;
}__attribute__((packed)) bar_t;

bar_t second = { {0}, first.c}; //this should define first.c as 5
memcpy(second.b,first.b,3*sizeof(int));

关于c - 用另一个结构的内容初始化一个结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42152718/

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