2012-03-24 16 views
9

構造体には複数の配列があります。配列にはunsigned char [4]という型があります。構造体の配列の値を初期化する

は、私は1つの行にすべての4つの値を初期化する方法があるかどう思っ

struct->array1[0] = (unsigned char) something; 
... 
struct->array1[3] = (unsigned char) something; 

を呼び出すことにより、各要素を初期化することができます。解決方法:すべての値を初期化して一時配列を作成し、memset()を呼び出して値を構造体配列にコピーする必要がありました。

+0

同じ値ですか? – hmjd

+0

私はこれがよく知られているので、あるグーグルが迅速に答えを明らかにしたと言わなければなりません... http://stackoverflow.com/questions/201101/how-to-initialize-an-array-in-c ;-) – tchap

答えて

5

値が同じ場合は、somet値が配列に格納されている場合などの興

struct->array[0] = struct->array[1] = struct->array[2] = struct->array[3] = (unsigned char) something; 

はそうでない場合、あなたはとても

memcpy(struct->array, some_array, sizeof(struct->array)); 
+0

これは私がする必要があったものです。私は一時配列を作成しようとしていましたが、それは同じですが、私はmemcpyする必要がありました。ありがとう! –

23

あなたが本当にあなたは必ずそれから、あなたは変数を宣言する時にそれを行うことができますという意味で「初期化」を意味する場合:

struct x { 
    unsigned char array1[4]; 
    unsigned char array2[4]; 
}; 

struct x mystruct = { 
    { 1, 2, 3, 4 }, 
    { 5, 6, 7, 8 } 
}; 
+0

私は、配列を使って各値を編集するために構造体が作成されると意味があります。 –

+3

Gotcha - それらをすべて同じ値に設定するには 'memset()'を使用するか、テンプレート配列を作成し、それらが異なるようにするには 'memcpy()'を使います。それ以外にも、あなたができることは、それらを1つずつ割り当てることです。 –

+0

ありがとう、memsetは私が必要なものです。 –

2

はい:

struct Foo 
{ 
    unsigned char a[4]; 
    unsigned char b[4]; 
}; 

struct Foo x = { { 1, 2, 3, 'a' }, { 'a', 'b', 'c', 0 } }; 
10

を作成したとき構造体の場合は、総計初期化で初期化できます。

struct test { 
    int blah; 
    char arr[4]; 
}; 

struct test = { 5, { 'a', 'b', 'c', 'd' } }; 
2

私はあなたが(あなたのですか?)ポインタを持って見るようmemcpy機能を使用することができます。

ポインタのメモリをcalloc()に割り当てると、構造体内のすべてが0で初期化されます。

それ以外の場合は、memset()を0にするか、値を要素ごとに割り当てる必要があります。

memset(struct_pointer, 0, sizeof *struct_pointer); 
+0

ありがとうございます。 memsetの部分は私を助けたものです。 –

0

あなたがあまりにもループすることができます

for(i = 0; i < 4; i++) the_struct->array1[i] = (unsigned char) something; 

これは、あなたがcharいない場合でも動作しますが、例えばますint(および値!= 0)。実際には、例えばint型のstruct(sizeof intが1より大きい場合)をmemsettingすることは、それらを初期化する正しい方法ではありません。

関連する問題