Array ab bestimmter Position an Funktion übergeben



  • Hallo, ist das erlaubt bzw. ist das definiert?
    Folgendes:

    void Dtoc(unsigned char* target,Daten* source, int count)
    {
        int i;
        for(i = 0;i < count;i++)
        {
            memcpy(&target[0+i*size],&source[i].timestamp,sizeof(source[i].timestamp));
            memcpy(&target[4+i*size],&source[i].type,sizeof(source[i].type));
            memcpy(&target[6+i*size],&source[i].ID,sizeof(source[i].ID));
            memcpy(&target[7+i*size],&source[i].daten.sshort[0],sizeof(source[i].daten.sshort[0]));
            memcpy(&target[9+i*size],&source[i].daten.sshort[1],sizeof(source[i].daten.sshort[1]));
            memcpy(&target[11+i*size],&source[i].daten.sshort[2],sizeof(source[i].daten.sshort[2]));
            memcpy(&target[13+i*size],&source[i].daten.sshort[3],sizeof(source[i].daten.sshort[3]));
        }
    
    }
    

    source ist ein Array(einer definierten Struktur)aus dem ich eine gewisse Menge an Daten in das Chararray(passender Größe) target kopieren möchte.

    Folgendermaßen benutze ich diese Funktion:

    Dtoc(&packet[0],&MsgSpeicher[Lesepointer],PACKETSIZE);
    

    Ist das "legal"? Meine Idee war, das Array MsgSpeicher(in welchem die "Datenstruktur" abgespeichert liegt) ab Position Lesepointer einzulesen, so dass also in der Funktion Dtoc das nullte Element eben das Lesepointerelement ist.
    Funktioniert das? Garantiert der Standard dass das nicht doch anders referenziert wird?



  • ...ich glaube nicht, daß das funktioniert, man müsste den Zeiger "target" um "sizeof" verschieben... 🙄



  • RR schrieb:

    ...ich glaube nicht, daß das funktioniert, man müsste den Zeiger "target" um "sizeof" verschieben... 🙄

    Das sollte identisch zu dem sein, was ich mache



  • Wo kommt das "size" her?



  • Wenn paddingbytes in dein struct eingefuegt wurden, dann funktioniert es nicht.



  • size ist die summe der einzelgrößen der Datenstruktur. Daher ist in dem size kein padding enthalten



  • Das kann so nie "geschrieben" werden...sorry...das ist eine Mischung von statischen "sizes" und (dynamischen) "sizeofes"... ⚠



  • Da kann ich dir nicht wirklich folgen. Tatsache ist, das es in der Tat funktioniert.
    Das statische size dient doch nur dazu, nachfolgende Strukturen an die richtige Stelle im Chararray zu schreiben


Anmelden zum Antworten