Char-Array in C-Struktur

Hallo,

ich sitze gerade vor einer Alignment-Aufgabe, in der eine Struktur angelegt und dann sofort initialisiert wird. Das sieht also so aus:

struct{char a[6]; …(hier kommen noch weitere Datentypen)…}example = {„ABC“, (…)};

Wie sieht das dann im Speicher aus? Man braucht ja eigentlich nur 4 Byte, hat aber 6. Also ich nehme an, a[0] = ‚A‘, a[1] = ‚B‘, a[2] = ‚C‘ und a[3] =’\0’. Aber was ist dann in a[4] und a[5]?

Danke schonmal für die Hilfe!

Wenn ich mir das so ansehe, dann weiß ich wieder, warum ich vor langer Zeit aufgehört habe, in C zu programmieren.

Hallo,
Laut C11 6.7.9.19 steht \0 in a[4] und a[5].

Dem Compiler steht aber z.B. frei zwischen a und dem nächsten struct-Member weitere „padding“-Bytes einzubauen, deren Werte sind undefiniert.

Danke. Eine Frage noch: es handelt sich um einen Mikrocontroller (MSP430). Gilt dafür auch, daß in die überflüssigen Felder einfach Stringende-Zeichen (\0) geschrieben werden?

Bei C gibt es nun einmal den Standard (aktuell C11, davor C99), dort ist es vorgeschrieben wie angegeben. Dieser Standard wird dann von den Compilern implementiert. Bei den verbreitetsten (clang und gcc) mindestens konform, aber durchaus mit mehr oder weniger konsistenten Erweiterungen.

Falls der Controller-Compiler einer dieser beiden Infrastrukturen als Basis hat (LLVM bzw. GCC), dann klappt das. Falls die einen eigenen Compiler geschrieben haben, dann haben sie vielleicht nur so ungefähr den Standard benutzt und es klappt nicht. Letzteres sieht dann aus wie bei SQL, wo es nicht ein Datenbank-System gibt, was den Standard korrekt umsetzt. Also ausprobieren, dann weißt Du es.

1 Like