gpt4 book ai didi

c - 如何使用 C 中的 offsetof() 和指针在结构中填充数组

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

我有一个结构

typedef struct _st_L3 {
int e;
int f;
int bb[5];
int g;
} st_L3;

我正在使用 offsetof() 来获取所有元素的偏移量。

如何使用 memcpy、offsetof() 并知道基本结构的地址将值复制到 bb[5]?

我试过这个:

从 0 到 4

memcpy((base_address_of_st_L3 + offset + sizeof(int)*i ), &int_data, sizeof(int))

最佳答案

How can I copy values to bb[5] using memcpy, offsetof() and knowing address of the base struct?

以下代码片段声明了结构和一个包含 5 个 int 的数组。然后使用 memcpyint 的 复制到结构的 bb 成员中。我将指针指向 void* 以尝试“概括”该示例。

int main() {
st_L3 var;
int array[5]; // int_data
void *pnt = &var; // base_address_of_st_L3

// using operator `[]`
memcpy(&((char*)pnt)[offsetof(st_L3, bb)], array, sizeof(int) * 5);

// using pointer arithmetics
memcpy(((char*)pnt) + offsetof(st_L3, bb), array, sizeof(int) * 5);

// one variable at a time
for (int i = 0; i < 5; ++i) {
memcpy(&((char*)pnt)[offsetof(st_L3, bb) + i], &array[i], sizeof(int));
}
}

请注意,对 void* 指针进行指针运算是无效的。这就是为什么需要转换为 char* 的原因。

关于c - 如何使用 C 中的 offsetof() 和指针在结构中填充数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55872106/

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