1

次のプログラムで:

int main()
{
  struct Node node;
  struct Node* p = (Struct Node*) malloc(sizeof(struct Node));
  *p =node;
  printf("%d\n", *p->seq);
}

通常私はしたmemcpy(p, node, sizeof(node))

今、私は上記のコードを試してみましたが、うまくいきましmemcpymalloc。割り当ては非常に正しいですか?ありがとう!

4

5 に答える 5

4

直接割り当てても問題ありません。実装は、実際には を介し​​てそれを実装する場合がありmemcpyます。ISO C99 仕様のセクション 6.2.6.1 の脚注 42 から:

したがって、たとえば、構造体の割り当ては、一度に要素ごとに、または を介し​​て実装できます memcpy

memcpyの使用と代入の唯一の違いstructは、代入 (要素単位で実装されている場合) では、 へのパディング ビットに格納されている値が保持されないことstructです。ただし、これは、これらのビットが何を保存するかをたまたま気にするというまれなケースでのみ問題になります (たとえばmemcmpstruct後で使用する場合)。

于 2013-05-19T20:37:29.557 に答える
3

これは問題なく機能し、コピーを行います。

于 2013-05-19T20:17:37.993 に答える
2

一部のコードを省略しない限り、割り当ては無意味です。

struct Node node; // uninitialized variable
struct Node *p = malloc(sizeof(struct Node));
*p = node; // copy an uninitialized variable to a new place

あなたが秘書で、上司から次のような指示を受けたと想像してください。

  1. ごみ箱から紙を取り出します。

  2. ごみ箱から 2 枚目のシートを取り出します。

  3. 1 枚目のシートの内容を 2 枚目のシートにコピーします。

意味がありません。Notememcpy()は本質的に代入と同等です。は初期化されていないため、 と 代入はどちらmemcpy()も無意味nodeです。

于 2013-05-19T20:21:52.497 に答える