我有一个看起来像这样的复杂结构。
struct a
{
struct b
{
int b_inner_int;
char b_inner_char;
}x;
struct c
{
int c_inner_int;
char c_inner_char;
}y;
}z;
我使用一个函数,它将“struct c”的地址作为参数。现在我希望这个函数将“struct c”的值复制到“struct b”。我在 main 函数中进行的函数调用可能如下所示。
copy_val(&z.y);
现在,我该如何定义 copy_val?有什么建议么? 如果我定义一个 struct c 类型的指针,如下所示,它不起作用。
void copy_val(struct c *addr)
{
struct c *tmp=addr;
int tmp_int=tmp->c_inner_int;
int tmp_char=tmp->c_inner_char;
tmp=tmp-1; /** assuming that b and c are of same type and decrementing pointer by 1 takes to beginning of b **/
tmp->b_inner_int=tmp_int;
tmp->b_inner_char=tmp_char;
}
最佳答案
#include <stdio.h>
#include <stddef.h>
struct a
{
struct b
{
int b_inner_int;
char b_inner_char;
}x;
struct c
{
int c_inner_int;
char c_inner_char;
}y;
}z;
void copy_val(struct c *addr){
size_t offset_c = offsetof(struct a, y);
size_t offset_b = offsetof(struct a, x);
struct b *bp = (struct b*)((char*)addr - offset_c + offset_b);
bp->b_inner_int = addr->c_inner_int;
bp->b_inner_char = addr->c_inner_char;
}
int main(void){
z.y.c_inner_int = 1;
z.y.c_inner_char = '1';
copy_val(&z.y);
printf("%d, %c\n", z.x.b_inner_int, z.x.b_inner_char);
return 0;
}
关于使用将一个内部结构的地址作为参数的函数将一个内部结构的变量复制到另一个内部结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25287966/