Date in einen Struct kopieren will nich



  • Hab da so ein kleines total doofes Problem. Ich mache einfach folgendes
    typedef struct tagStruktur { // bmfh
    unsigned short a;
    unsigned int b;
    unsigned short c;
    unsigned short d;
    unsigned int e;
    } Teststruktur;

    funktion
    {
    Teststruktur header;
    unsigned short buffer[7];
    buffer[0] = 2;
    buffer[1] = 2500;
    buffer[2] = 0;
    buffer[3] = 0;
    buffer[4] = 0;
    buffer[5] = 0;
    buffer[6] = 0;
    memcpy(&header,&buffer[0],14);
    }

    So jetzt würde ich eigendlich erwarten, dass 2 in a kopiert wird. Das passiert auch. Das Problem is nur das ich denken würde, dass in b 2500 (also buffer[1] und [2]) kopiert wird. Das dumme is nur, dass statt [1] und [2] [2]und [3] in b kopiert werden. Allerdings stimmt danach alles wieder. Also [4] kommt in c, dann [5] und in d [6] und das nicht vorhandene [7]. der buffer[1] verschwindet einfach in einem nicht definierten aber trotzdem vorhendenen short an stelle 2 der struct. Wiso ist das da?



  • Das kommt wohl daher, daß der Compiler padding-bytes einfügt, damit für die Typen das alignement stimmt.

    Rechne doch mal aus, wie groß Deine struct rein von den Datentypen her sein müßte und schau Dir mal sizeof(tagStruktur) an. Da siehst wieviel er dazu geschummelt hat.


Anmelden zum Antworten