如何在C中复制另一个结构中的结构内容

时间:2017-07-19 18:24:25

标签: c struct structure

我有一个C程序,我有两个结构

struct one{
  int a;
  int b;
  char *s;
  int c;
};

struct two{
  int a;
  int e;
  char *s;
  int d;
};

是否可以编写一个函数来复制具有相同类型和名称的变量值struct onestruct two? 例如,在这种情况下,函数应该执行此操作

two.a = one.a;
two.s = one.s;

3 个答案:

答案 0 :(得分:3)

无法从结构中自动获取给定名称的字段。虽然您可以在Java中使用反射执行类似的操作,但无法在C中完成。您只需手动复制相关成员。

答案 1 :(得分:0)

您可以像这样编写函数宏:

#define CAT(A, B) A ## B
#define ARGS_ASSIGN(N, L, R, ...) CAT(_ARGS_ASSIGN, N) (L, R, __VA_ARGS__)
#define _ARGS_ASSIGN1(L, R, M0) L.M0 = R.M0;
#define _ARGS_ASSIGN2(L, R, M0, M1) L.M0 = R.M0; L.M1 = R.M1;
/* ... define sufficiently more */

并以这种方式使用:

ARGS_ASSIGN(2, two, one, a, s)

答案 2 :(得分:-2)

理论上,如果您确定编译器将结构按其类型定义排序,则可以使用下面的代码使用上面的示例使用简单的块复制函数执行此操作。但是,我认为这不是一个好主意。使用与上述建议之一中定义的相同类型的两个数据结构,块复制将更安全。

使用块复制功能的示例:

void main(void)
{

    struct one{
        int a;
        int b;
        char *s;
        int c;
    };

    struct two{
        int a;
        int e;
        char *s;
        int d;
    };

    // Place code that assigns variable one here

    memcpy(&two, &one, sizeof(one));
}