Structelemente in Array kopieren

Gast #2340638
Lesenswert?
• ▲
▼
Hallo,
wie kann man Elemente aus einem Struct in ein Array kopieren?

z.B.:
1
struct test
2
{
3
char a;
4
char b;
5

6
} 
7

8
struct test tStruct={1,1};
9

10
char Array[2];
11

12

13
void foo(void)
14
{
15
Array[0]=tStruct.a;
16
Array[1]=tStruct.b;
17

18
}

Geht das auch eleganter, z.B. mit memcopy oder so?

Grüße
#2340650
Lesenswert?
• ▲
▼
memcpy heißt die Funktion.

Allerdings sollte man dabei wissen, was man tut.
In deinem Beispiel geht es gut, aber je nach struct steht es dem 
Compiler frei zwischen den Elementen der struct Füllbytes einzubauen (um 
z.B. nach einem char das nächste int-Element auf einer geraden Adresse 
beginnen zu lassen). Das muß man natürlich im Blick behalten.
Gast #2340654
Lesenswert?
• ▲
▼
Klaus Wachtler schrieb:
> Allerdings sollte man dabei wissen, was man tut.
> In deinem Beispiel geht es gut, aber je nach struct steht es dem
> Compiler frei zwischen den Elementen der struct Füllbytes einzubauen (um
> z.B. nach einem char das nächste int-Element auf einer geraden Adresse
> beginnen zu lassen). Das muß man natürlich im Blick behalten.

Wenn alle Elemente von gleichen Typ sind, macht der Compiler das dann 
auch?
Ansonsten muss man wohl mit volatile herumspielen?

Viele Grüße
Persönliche Seite #2340993
Lesenswert?
• ▲
▼
Martin H. schrieb:

> Wenn alle Elemente von gleichen Typ sind, macht der Compiler das dann
> auch?

Unter Umständen ja, wenn zB dieser Typ schräge größe hat (zB gepackte 
Struktur mit 3 Bytes).

> Ansonsten muss man wohl mit volatile herumspielen?

Nein. volatile ändert nichts am Strukturlayout.

1
typedef struct
2
{
3
   char a;
4
   char b;
5
} test_t;
6

7
test_t test = { 1, 1 };
8

9
char array[sizeof (test_t)];

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren