【发布时间】:2012-10-28 08:29:36
【问题描述】:
直到最近,我只看到使用memcpy() 完成结构字段的复制。在课程和在线说明中,将一个结构的内容复制到另一个结构中通常看起来像
struct block *b0 = malloc(sizeof(struct block));
struct block *b1 = malloc(sizeof(struct block));
/* populate fields in *b0 */
memcpy(b1, b0, sizeof *b1); /* copy contents of b0 into b1 */
/* free b0, b1 */
但是,此任务也可以通过替换 memcpy() 的简单分配来完成。
*b1 = *b0; /* dereferenced struct assignment */
这是否有充分的理由不被广泛使用(至少在我有限的经验中)?这两种方法——assignment 和memcpy()——是等效的,还是有一些令人信服的理由来使用memcpy()?
【问题讨论】:
-
在 C 中这两种方法是等价的,它们都不做深拷贝。
-
memcpy(b1, b0, sizeof(struct block));的风格非常糟糕且容易出错。使用分配或memcpy(b1, b0, sizeof *b1); -
@R..:你也可以支持
memcpy(b1, b0, sizeof *b0)。使用sizeof *可以消除两个可能的错误之一,而使用sizeof(struct block)则两者都不会。 -
@Jeyaram 不久前忘记感谢您的编辑,谢谢。