struct und read/write



  • ich habe ein struct

    struct daten
    {
    int zahl;
    string text;
    bool wahr;
    }

    ich habe jetzt eine tabelle, wo ich diese daten in eine datei speichern und später dort wieder einlesen möchte.

    adten in als struct in datei ablegen

    ofstream outFile("table.dta", ios::binary | ios::ate | ios::out);
    daten table;
    for (int i=0;i<anzahl;i++)
    {
    table.zahl = tabelle[i].wert;
    table.text = tabelle[i].text;
    table.wahr = tabelle[i].zustand;
    outFile.write((char*)&table,sizeof(table));
    }
    outFile.close();
    

    ich hoffe das ist wenigstens richtig, denn wie ich das ausgeben soll ist mir unklar. dies hier funktioniert nicht:

    aus datei struct lesen

    ifstream inFile("table.dta", ios::binary | ios::in);
    if (inFile.good())
    {
    daten table;
    int i=0;
    while (!inFile.eof())
    {
    inFile.read((char*)&table,sizeof(table));
    tabelle[i].wert = table.zahl;
    tabelle[i].text = table.text;
    tabelle[i].zustand = table.wahr;
    i++;
    }
    }
    inFile.close();
    

    die zeile inFile.read((char*)&table,sizeof(table)); produziert speicherfehlermeldung 🙄

    hat wer ein funktionierendes beispiel parat, wie man ein struct richtig speichert und einlesen muss? danke!

    die schwierigkeit liegt hier wohl am datentyp string, ich möchte aber gern einen dynamischen datentyp, um überlauf zu verhindern 🙄



  • ich schätz mal das geht garnicht, da ein string keine feste grösse hat, oder?
    das irgendwie doof 🙂



  • #include <iostream>
    #include <string>
    
    int main()
    {
    	std::string str = "SDfSDFSDFSDFS";
    	std::cout << sizeof(str);
    
    	return 0;
    }
    

    Ausgabe: 4

    🙄



  • 😕 😮 🙄 🤡



  • Könntest ja vor dem String 4 Byte für die Länge speichern. Oder meistens sollten auch 2 reichen.

    Bye, TGGC (Keine Macht den Dummen)



  • Apollon schrieb:

    #include <iostream>
    #include <string>
    
    int main()
    {
    	std::string str = "SDfSDFSDFSDFS";
    	std::cout << sizeof(str);
    
    	return 0;
    }
    

    Ausgabe: 4

    std::cout << str.length();
    

    TGGC schrieb:

    Könntest ja vor dem String 4 Byte für die Länge speichern. Oder meistens sollten auch 2 reichen.

    Sollst du hier posten?



  • [/quote]

    std::cout << str.length();
    

    [/quote]

    also muss man zusätzlich vorne weg die länge des strings speichern?
    dann kann man es aber nicht als struct einlesen, wie dann? 😕

    über hilfe wäre ich dankbar 🙂



  • Länge n lesen, dann n Zeichen und dem String hinzufügen. Zweiteres kann man auch in Blöcken über 'nen Buffer machen, sollte etwas schneller gehen.

    Bye, TGGC (Keine Macht den Dummen)



  • das klingt jetzt danach, das man aus einem string ein char machen soll.
    (alle strings bekommen gleiche länge)
    wo bliebt dann der nutzen? oder ich habe es nicht verstanden.


Anmelden zum Antworten