До недавнего времени я видел только копирование полей структуры, выполненных с помощью 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 */
Есть ли веская причина, почему это не так широко используется (по крайней мере, в моем ограниченном опыте)? Являются ли эти два метода-присвоением и memcpy()
-эквивалентными, или есть какая-то веская причина использовать memcpy()
вообще?