2017-02-12 30 views
0

で配列を初期化するためのmemcpyを使用する方法:1つの引数が4つの要素の配列です私もそれのための機能を初期化している私は、単純な構造体持っている構造体

typedef struct{ 
double par[4]; 
}struct_type; 

を。どのように正しく使用するmemcpy構造体の配列を初期化するには?この私のために動作しませんような何か:

struct_type* init_fcn(double array[4]){ 

struct _type* retVal; 
retVal->par=malloc(sizeof(double)*4); 
memcpy(retVal->par,&array); 

return retVal; 
} 

は、私は、initは一つずつ値ことができますが、私はmemcpyのが良いと速くなりますthnik。あなたはそれを適切に行う方法を知っていますか?

+0

は、memcpyのも –

+0

'のはsizeof(*ダブル)malloc関数に与えられたサイズと同じである配列のサイズを、必要と'ナンセンスであるとなりますコンパイラエラーです。これは[mcve] – StoryTeller

+0

ではなく、 'memcpy(retVal-> par、array、sizeof(double)* 4)'のようなものです。また、mallocでは 'sizeof(double)'(1要素のサイズ)を使用します。 –

答えて

4

struct_typeの新しいオブジェクトへのポインタを返す場合は、そのようなオブジェクトを正確に作成する必要があります。つまり、メンバーに直接スペースを割り当てる代わりにmalloc(sizeof(struct_type))を使用します。ようになりますあなたのコードは次のとおりです。

ああ、私は見
struct_type* init_fcn(double array[4]){ 

    struct_type* retVal; 
    retVal = malloc(sizeof(struct_type)); 
    if (retVal) { 
     memcpy(retVal->par,array,sizeof(retVal->par)); 
    } 

    return retVal; 
} 
+0

sizeof(配列)も間違っています – PSkocik

+0

@PSkocik:今すぐ気付いて修正しました。ありがとう。 –

+0

ありがとう!それは私のために働く。したがって、par配列の最初の値は 'r-> par'で、 '&r-par'は最初の要素のアドレスですか? –