Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Union mit einem Struct und einem char-Array

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
15.03.2006, 16:06 Uhr
~failedC
Gast


Hallo,

ich ab folgenden code geschrieben:


C++:
struct TEST
{
    char ch0[2];
    char ch00[2];
    int z;
};

union NumericType
{
   char ch1[8];
   TEST t;
};

int main()
{
   union NumericType Values;
   Values.ch1[0] = 'x';
   Values.ch1[1] = 'y';
   Values.ch1[2] = 'z';
   Values.ch1[3] = 'a';

   Values.ch1[4] = '1';
   Values.ch1[5] = '0';
   Values.ch1[6] = '0';
   Values.ch1[7] = '1';

   printf("%c\n", Values.ch1[0]);
   printf("%c\n", Values.t.ch00[0]);
   printf("%d\n", Values.t.z);



die Werte von ch1 und ch00 stimmen, bei z kommen leider
"abstrakte" Werte raus. Weiß einer wo's hängt?

Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.03.2006, 16:42 Uhr
virtual
Sexiest Bit alive
(Operator)


Der Code ist generell nicht portabel. Er kann von compiler zu compiler unterschiedliche Ergebnisse liefern.
Auf einen Compiler, der vermutlich das tut, was Du erwartest, würde die letzte Ausgabe lauten
825241649
oder eben hexadezimal
31303031
oder eben der nicht terminierte String
"1001"
Das ist aber auch Platformabhängig.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
15.03.2006, 17:02 Uhr
ao

(Operator)


Das liegt am sog. "Alignment". Die Member von TEST grenzen nicht in jedem Fall unmittelbar aneinander, sondern der Compiler kann zwischen ihnen beliebig viel Platz lassen, z.B. um zu optimieren oder um Zugriffe überhaupt zu ermöglichen (manche CPUs können auf int- oder long-Variablen nur zugreifen, wenn diese auf geraden Speicheradressen liegen o.ä.).

Wieviel Platz freibleibt, ist abhängig von den Einstellungen des Compilers und vom Typ der Member, und ist in der Regel auch über Compiler-Optionen steuerbar. Daraus erklärt sich virtuals Aussage "nicht portabel".

Welchen Compiler benutzt du?

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.03.2006, 17:23 Uhr
~failedC
Gast


Hi,

ja, hab den Code nochmal neu geschrieben und ganz anders,
habs eben auf verschiedenen Plattformen getest und hat
keine Probleme gemacht, denke das ich es jetzt richtig hab.

Danke und Grüsse!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
15.03.2006, 20:46 Uhr
ao

(Operator)



Zitat von ~failedC:
ja, hab den Code nochmal neu geschrieben und ganz anders,
habs eben auf verschiedenen Plattformen getest

Dann zeig ihn doch mal. Portablen union-Code möchte ich gern mal sehen.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
15.03.2006, 21:01 Uhr
(un)wissender
Niveauwart


Jo, union sind da ein wenig übel.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: