直到最近,我只看到过使用memcpy()
复制结构字段的情况。在课程和在线教程中,将一个结构体的内容复制到另一个结构体中通常看起来像是:
Up until recently, I have only seen copying of structure fields done with memcpy()
. In classes and online instructions, copying the contents of one struct into another generally looks like
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 */
为什么这种方法没有被广泛使用(至少在我的有限经验中)?这两种方法——赋值和memcpy()
——是否等效,或者一般情况下使用memcpy()
是否有一些强制的理由?
memcpy(b1, b0, sizeof(struct block));
这种写法非常不好,容易出错。建议使用赋值语句或者memcpy(b1, b0, sizeof *b1);
进行替换。 - R.. GitHub STOP HELPING ICEmemcpy(b1, b0, sizeof *b0)
。使用sizeof *
消除了两个可能的错误之一,而使用sizeof(struct block)
则没有消除任何一个。 - Steve Jessop