2011-02-09 4 views
-1

重複の可能性をコピーするのmemcpyを使用して:
copying one structure to another
Copying one structure to another構造に

 struct node 
     { 
      int n; 
      struct classifier keys[M-1]; 
      struct node *p[M]; 
     }*root=NULL; 

を私はタイプノードの

 (*newnode)->keys[i] 
あるnewnodeを作成しました

iが同じタイプでもある構造clsf_ptrからキー構造にデータをコピーしたい 私はこのようにそれを行うことができますが、私はそのはず、各メンバ関数の開始については

 memcpy((*newnode)->keys[i], clsf_ptr) 
+0

同じユーザーを重複させる:[構造を別の構造にコピー](http://stackoverflow.com/questions/4932012/copying-one-structure-to-another)と[構造を別の構造にコピーする](http: //stackoverflow.com/questions/4931123/copying-one-structure-to-another) –

+1

なぜこの3回質問することで時間を無駄にするのですか?あなたは答えを受け入れましたか? – stacker

+2

私はそれが[4932012](http://stackoverflow.com/questions/4932012/copying-one-structure-to-another)の複製ではないと思いますが、[4931123](http://stackoverflow.com/questions/ 4931123/copy-one-structure-to-another)。これは、ある構造体から別の構造体への配列のコピーについてです。 [4931123](http://stackoverflow.com/questions/4931123/copying-one-structure-to-another)は、構造体全体をコピーすることに関するものです。 4932012は重複として間違って閉じられました(ただし、同じ質問を再度実行すると状況が悪化するだけです)。 – finnw

答えて

3

に初期化する必要はありませんおそらくこと:

memcpy(&(newnode->keys[i]), &clsf_ptr, sizeof(struct classifier)); 

newnodeを仮定すると、ポインタ対nodeであり、そしてclsf_ptrはclassifier`あります)。

newnode->keys[i] = clsf_ptr; 

注意これらのアプローチの両方が唯一のshallow copyを行うこと:あなただけ行うことができるように

また、構造体の割り当ては、C言語で合法です。したがって、struct classifierにメモリへのポインタがある場合、メモリの新しいコピーを作成するのではなく、ポインタ自体がコピーされます。

+0

Oli Charlesworth @ newnodeはノードへのポインタですが、clsf_ptrはクラシファイアへのポインタではありません – asir

+0

@asir:それは何ですか?それが他のものなら、それは非常に良い変数名ではありません! –

+0

@Oli Charlesworth:インスタンスのclsf_ptrを持つ構造体分類子の単なるclassifierのインスタンスです。いくつかのデータを初期化しました。そのデータを(* newnode) - > keys [i]にコピーする必要があります – asir