Cho đến gần đây, tôi chỉ thấy sao chép các trường cấu trúc được thực hiện với memcpy()
. Trong lớp học và hướng dẫn trực tuyến, sao chép nội dung của một struct thành khác thường trông giống nhưSao chép cấu trúc trong C với gán thay vì 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 */
Tuy nhiên, nhiệm vụ này cũng có thể được thực hiện bằng một nhiệm vụ đơn giản thay thế memcpy()
.
*b1 = *b0; /* dereferenced struct assignment */
Có lý do chính đáng tại sao điều này không được sử dụng rộng rãi (ít nhất là trong kinh nghiệm hạn chế của tôi)? Có phải hai phương pháp này — chỉ định và memcpy()
— tương đương hoặc có một số lý do thuyết phục để sử dụng memcpy()
nói chung không?
Bạn có nghĩa là * b1 = * b0 ?? – Jeyaram
Trong C, hai phương thức tương đương nhau, và cả hai đều không có bản sao sâu. –
'memcpy (b1, b0, sizeof (khối cấu trúc));' là kiểu rất xấu và dễ bị lỗi. Hoặc sử dụng gán hoặc 'memcpy (b1, b0, sizeof * b1);' –