binäres lesen/schreiben von strings



  • Kann es sein das dat net geht?

    int write()
    {
        ofstream ziel;
        ziel.open("ziel.bin",ios::binary|ios::out);
        if(!ziel)
        {
            cerr<<"Die Datei konnte nicht geschrieben werden!";
            cin.get();
            exit(-1);
        };
        string a("test");
        string b("nochmaltest");
        ziel.write(reinterpret_cast<const char*>(&a), sizeof(a));
        ziel.write(reinterpret_cast<const char*>(&b), sizeof(b));
        ziel.close();
    };
    
    int main()
    {
        write();
        ifstream quelle;
        quelle.open("ziel.bin", ios::binary|ios::in);
        if(!quelle)
        {
            cerr<<"Die Datei konnte nicht geoeffnet werden!";
            cin.get();
            exit(-1);
        };
        string a;
        string b;
        quelle.read(reinterpret_cast<char*>(&a), sizeof(a));
        cout<<"string a = "<<a<<endl;
        quelle.read(reinterpret_cast<char*>(&b), sizeof(b));
        cout<<"string b = "<<b<<endl;
        quelle.close();
        cin.get();
    };
    

    funzt jedenfalls net! (Ihr könnts ja mal probieren...)



  • ness schrieb:

    Kann es sein das dat net geht?

    int write()
    {
        ofstream ziel;
        ziel.open("ziel.bin",ios::binary|ios::out);
        if(!ziel)
        {
            cerr<<"Die Datei konnte nicht geschrieben werden!";
            cin.get();
            exit(-1);
        };
        string a("test");
        string b("nochmaltest");
        ziel.write(reinterpret_cast<const char*>(&a), sizeof(a));
        ziel.write(reinterpret_cast<const char*>(&b), sizeof(b));
        ziel.close();
    };
    [...]
    

    Überleg dir, wie du eine Stringklasse implementieren würdest. Spätestens dann sollte dir klar werden, warum das nicht gehen kann.



  • jaja, ich weiß das ein string ein char array ist! Ich dachte das geht vielleicht doch...



  • ness schrieb:

    jaja, ich weiß das ein string ein char array ist

    Es ist eben kein char-Array. Wäre es ein char-Array, würde es gehen.
    Nocheinmal: Schreib dir eine rundimentäre Stringklasse, schau dir an was sizeof macht und verstehe warum dein Code nicht funktionieren kann.



  • string::c_str()

    Devil



  • Man sollte zuerst die Länge des Strings und dann den String selbst speichern. Mit c_str bekommst du einen Zeiger auf den internen Buffer. Zudem liefert sizeof die statische Größe der Klasse und nicht die Länge des Strings. size oder length ist was du brauchst.



  • devil81 schrieb:

    string::c_str()

    Oha. Viel Spass beim Einlesen 😉



  • HumeSikkins schrieb:

    devil81 schrieb:

    string::c_str()

    Oha. Viel Spass beim Einlesen 😉

    Es muss ja einen gewissen lerneffekt geben 😉 *g*

    Devil



  • Natürlich ist ein string mehr als nur ein char array, aber im grunde genommen basiert er doch auf einem...



  • Das zeilenweise einlesen geht ganz einfach mit getline().

    Wenn du VC++ 6 benutzt, dann musst du aber erst nen STL Fix für den installieren, da dort getline() nen Bug hat.

    Sollte allerdings noch erwähnen, dass getline bis zum nächsten Zeilenumbruch liest, d.h. mit richtigen Binaries geht das nicht



  • ness schrieb:

    Natürlich ist ein string mehr als nur ein char array, aber im grunde genommen basiert er doch auf einem...

    Nein, die Klasse string kapselt ein chararray, sie ist aber keins.

    Devil



  • ness schrieb:

    Natürlich ist ein string mehr als nur ein char array, aber im grunde genommen basiert er doch auf einem...

    ...aber einem dynamischen welches nicht in der Stringklasse gespeichert ist, sondern dort nur über einen Zeiger zugeordnet ist. Du musst dir die Anzahl der Zeichen sowie einen Zeiger auf den String von deinem Stringobjekt geben lassen.



  • SirLant schrieb:

    Das zeilenweise einlesen geht ganz einfach mit getline().

    viel spaß, wenn du damit Binär Dateien lesen willst 🙄



  • kingruedi schrieb:

    SirLant schrieb:

    Das zeilenweise einlesen geht ganz einfach mit getline().

    viel spaß, wenn du damit Binär Dateien lesen willst 🙄

    []Du hast mein Posting vollständig gelesen



  • SirLant schrieb:

    kingruedi schrieb:

    SirLant schrieb:

    Das zeilenweise einlesen geht ganz einfach mit getline().

    viel spaß, wenn du damit Binär Dateien lesen willst 🙄

    []Du hast mein Posting vollständig gelesen

    Nein *g* Hab es gerade erst gesehen. Das kommt davon, wenn du so viele Newlines in den Beiträgen benutzt 😉 |oder| Ich wollte nur noch einmal darauf hinweisen 😉


Log in to reply