最近まで、memcpy()
で完了した構造体フィールドのコピーしか見ていませんでした。クラスとオンラインの指示では、別のものに1つの構造体の内容をコピーすることは、一般memcpy()の代りにCの構造体をコピーする
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 */
これは、少なくとも私の限られた経験の中で広く使われていない理由がありますか?これらの2つの方法 - 割り当てとmemcpy()
- は同等か、一般的にはmemcpy()
を使用する理由がありますか?
を?? – Jeyaram
Cでは、2つのメソッドは同等であり、どちらもディープコピーを行いません。 –
'memcpy(b1、b0、sizeof(struct block));'は非常にスタイルが悪く、エラーを起こしやすいです。代入や 'memcpy(b1、b0、sizeof * b1);' –