深度复制一个结构体到另一个结构体

4

我有一个包含字符串和指针的struct。是否有可用的库函数将struct深度复制到另一个struct中。由于我拥有的struct非常大,因此不想逐个字段地复制。

glib是否有任何可以完成此操作的函数?

2个回答

6

不行。一个通用的函数没有办法知道你的结构体的结构(也就是仅在编译时可用的信息)。即使它知道了,它怎么知道在所有情况下什么构成了“深拷贝”呢?


4

您可以使用memcpy或memmove来复制结构体本身的全部内容。然而,由于C语言没有内省机制,通用函数无法复制指向的对象。

编辑以添加:正如几位评论者所指出的那样,在过去几十年中使用的C方言中,您可以将结构体分配给其他结构体,因此不再需要使用memcpy。


1
你甚至不需要使用 memcpy。你可以直接使用 a = b 进行浅拷贝。 - Oliver Charlesworth
这是相当近期的事情,而我们中的一些人已经老了。 - Perry
1
@Perry,自至少第一个C标准以来,这是被允许的。 - ouah
不是这样的。过去结构体的命名空间也会重叠,这意味着老手们必须以各种有模式的方式命名结构体标签,以避免名称冲突。真的。例如,在BSD内核中的各种内核结构的名称中仍然可以看到这种情况的影子。 - Perry
在K&R C之前是不允许的。请查看http://cm.bell-labs.com/who/dmr/chist.html中的“到1982年,清楚地表明C需要正式标准化...”段落。 - ouah
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接