【发布时间】:2017-07-19 18:24:25
【问题描述】:
我有一个 C 程序,其中有两个结构
struct one{
int a;
int b;
char *s;
int c;
};
struct two{
int a;
int e;
char *s;
int d;
};
是否可以编写一个函数,将具有相同类型和名称的变量的值从struct one 复制到struct two?
例如,在这种情况下,函数应该这样做
two.a = one.a;
two.s = one.s;
【问题讨论】:
-
那是不正当的。
-
如果 *pone 指向 1 并且 *ptwo 指向 2 那么 memcpy(one,two,sizeof(one)); 应该给它。
-
所以你复制了一个指针而不是它指向的内容。假设你然后
free指针在第一个struct。注定失败。 -
不是真的,不是自动的。典型的解决方法是将公共字段提取到父结构中,该结构可以嵌入到两个结构中并复制。或者,您可以通过半生不熟的内省来玩令人讨厌的游戏,以注册每个成员的姓名、偏移量和类型。然后编写一个函数来复制匹配的字段。或者使用代码生成对结构定义进行预处理,离线生成合适的复制代码。
-
free 只能与 malloc() 结合使用,这些是静态结构。