我有一个结构
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))
答案 0 :(得分:1)
如何使用memcpy,offsetof()并知道基本结构的地址将值复制到bb [5]?
以下代码片段声明了结构和5个int
的数组。然后使用memcpy
将int's
复制到结构的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*
的原因。
答案 1 :(得分:1)
如果我理解您的问题,您希望将整数复制为5的整数数组吗?
您可以这样操作:
((st_L3*)base_address_of_st_L3)->bb[0] = int_data;
当然,bb
仍将剩下四个将不初始化的整数。
或者您是说int_data
也是由五个整数组成的数组?
{
int i;
[... snipped ...]
for(i = 0; i < 5; i++)
{
((st_L3*)base_address_of_st_L3)->bb[i] = int_data[i];
}
}