Sizeof Falsche Größe??



  • Nutze DevC++. Du weist nicht zufällig wo ich es dort abstellen kann???

    MfG Bellze

    P.S.: Muss es daran liegen???



  • ja, es liegt daran. aber warum willst du das abschalten??
    schau halt in die compiler doku. stichwort 'padding bytes' oder 'struct alignment'



  • Nun, die werte werden nicht richtig angezeigt. Der erste Char wert haut hin. Wenn ich nun die Struktur aus der datei einlesen lasse mit hilfe von sizeof haut nichts mehr hin. wenn ich ihm sage er soll 43 nehmen haun auch die nachfolgenden Char werte hin. Nur eben die float werte nicht. Und leider hat Dev keine Doku dabei.

    MfG und danke Bellze



  • was willst du machen??

    eine struct liest und schreibt man immer als ganzes!

    gcc.gnu.org - schau dir dort die doku an, diesen compiler verwendet der DevC++



  • Das Prob ist das nicht ich die *.dat Datei erzeugt habe.

    Aber danke



  • Dev ist ein GCC, und da geht das so:

    struct {
    ...
    } __attribute__((packed));

    Das ist leider unportabel: Dein Programm wird sich auf anderen Compilern nicht compilieren lassen, und wenn du es mit einem GCC auf einer anderen plattform übersetzt, nicht richtig laufen (Größen der Typen unterschiedlich, andere float-Repräsentation, Endianness). Als Notbehelf isses aber OK.

    Es gibt 2 "korrekte" Lösungen:

    • eine Library benutzen, die auf vielen Plattformen existiert, und die lokale Repräsentation aller Basisdatentypen in eine universale Darstellung konvertieren kann. Dann würdest du dein Struct elementweise konvertieren und in eine Datei schreiben. Es gibt sowas, aber der Name fällt mir grad nicht ein (was mit x am Anfang)
    • Textdarstellung benutzen, fprintf und fscanf bzw. sprintf und sscanf. Diese Funktionen sind auf jeder ANSI-C Implementation vorhanden. Nachteil: Kostet Speicher und Performance. Evtl schwer zu parsen. Vorteil: Absolut portabel. Ist menschenlesbar.

    Die Welt tendiert zur Zeit zu einer Perversion der 2. Variante -- XML.



  • ThX:-) *bussy* Funzt mit packed einwandfrei. Nun habe ich leider nochn Prob. Ich weis ich bin zu Blöde ich sollte es lassen. Wie kann ich nun Die Struktur in ein Array lesen??

    Wenns euch zu blöde ist dann Antwortet einfach net.

    thX Bellze



  • sowas in der Art?

    #include <string.h>
    
    ...
    char array[sizeof(struct Satz)];
    memcpy(array, &einSatz, sizeof(struct Satz));
    

    [ Dieser Beitrag wurde am 13.01.2003 um 20:58 Uhr von Bashar editiert. ]



  • Erzeuge ich damit ein Array von Strukturen??? Dazu muss ich sagen das die Datei 10 Datensätze beinhaltet.

    MfG Bellze

    Habs selbst gelöst, trotzdem danke

    Das hab ich gesucht:

    for(i=0;i<10;i++)
    {
    while((fread(&daten,sizeof(daten),i+1,handel))==1);
    }

    [ Dieser Beitrag wurde am 13.01.2003 um 21:19 Uhr von Bellze editiert. ]



  • Du kannst auch einfach die Elemente der Struktur ihrer Speichergröße nach sortieren. Also erst floats, dann shorts, dann chars. Das minimiert die eingefügten Füllbytes.


Anmelden zum Antworten