Struct in Datei speichern



  • Hi,

    ich moechte struct - Daten in eine Datei speichern. Das klappt auch, aber nicht wenn die Daten groeßer als 2069 Bytes sind (hab ich ausprobiert), da werden dann 0 Bytes in die Datei geschrieben.

    #include <windows.h>
    
    typedef struct myStruct {
        int test
        char *content;
    } PACK_STRUCT;
    
    #pragma pack( pop, packing )
    #undef PACK_STRUCT
    
    void Save(char *filename) {
        long len;
        long structLen;
    
        myStruct mStruct;
    
        FILE *pWriteFile = fopen(filename, "w+b");
        rewind(pWriteFile);
    
        len = strlen("Hallo");
        mStruct.content = (char *)malloc(sizeof(char) * len);
        structLen = sizeof(myStruct) + sizeof(char) * len;
    
        strcpy(mStruct.content, "Hallo");
        mStruct.test = 2;
    
        long num=fwrite(&mStruct, structLen, 1, pWriteFile);
        printf("%ld / %ld Bytes gespeichert\n", num, structLen);
    
        fclose(pWriteFile);
    }
    

    Warum kann ich nicht mehr als eine 2069 Bytes große Struct in eine Datei schreiben?

    Mfg, Pk3 🙂



  • Das geht so nicht.
    fwrite schreibt numblock*numbytes ab der angegebenen Speicheradresse in die Datei.
    Die Tatsache, dass dein content ein Zeiger ist, muss fwrite ignorieren und schreibt den Speicherinhalt nach content in die Datei und nicht die Daten, auf die content zeigt, d.h. in deiner datei steht Müll.
    Deine 2069 Grenze lässt sich anhand deines Beispiels nicht reproduzieren, wahrscheinlich machst du irgendwelche Schleifen, welche dann aus anderen Gründen fehlschlagen.

    sizeof(char) ist übrigens per Definition immer = 1.


Anmelden zum Antworten