Kleines Ströme Problem mit dem gcc



  • Hi,

    wenn ich das Programm ausführe, ließt er die Daten zwar aus aber dazwischen sind viele komische Zeichen und am Ende steht "Segmention Error". Ich hab den Code groesstenteils aus der FAQ uebernommen.

    #include <iostream>
    #include  <fstream>
    #include <string>
    using namespace std;
    
    struct Person {
    std::string name;
    std::string vorname;
    };
    int main()
    {
    fstream datei("Namen.dat",ios::out|ios::binary);
    
    if(datei.is_open())
    {
    Person testuser;
    testuser.name = "Wurst";
    testuser.vorname = "Hans";
    datei.write((const char*)&testuser,sizeof(testuser));
    datei.close();
    }
    
    datei.open("Namen.dat",ios::in|ios::binary);
    
    if(datei.is_open())
    {
    Person testuser;
    while(datei.read((char*)&testuser,sizeof(testuser)))
    {
    cout << testuser.name << "\n";
    cout << testuser.vorname << "\n";
     }
    }
    datei.close();
    
    return 0;
    }
    


  • guten morgen

    wenn du in deiner structur strings verwendest
    mußt du zum auslesen der datei getline verwenden also zeilenweise
    einlesen.
    datei.read((char*)&testuser,sizeof(testuser) setzt eine feste
    größe von testuser voraus.
    in der faq wurden char[] arrays verwendet.
    gilt übrigens auch für das schreiben in die datei.



  • Wie funktioniert den dann die Schleife ?

    Person testuser;
    while(!datei.eof())
    {
        getline(datei,testuser.name);
        getline(datei,testuser.vorname);
        cout << testuser.name << "\n";
        cout << testuser.vorname << "\n";
    }
    


  • in datei schreiben:

    datei>>testuser.name>>'\0';
    datei>>testuser.vorname>>'\0';
    

    aus datei lesen:

    Person testuser; 
    while(!datei.eof()) 
    { 
        getline(datei,testuser.name,'\O'); 
        getline(datei,testuser.vorname,'\O'); 
        cout << testuser.name << "\n"; 
        cout << testuser.vorname << "\n"; 
    }
    

    gruß elwida



  • elwida schrieb:

    in datei schreiben:

    datei>>testuser.name>>'\0';
    datei>>testuser.vorname>>'\0';
    

    aus datei lesen:

    Person testuser; 
    while(!datei.eof()) 
    { 
        getline(datei,testuser.name,'\O'); 
        getline(datei,testuser.vorname,'\O'); 
        cout << testuser.name << "\n"; 
        cout << testuser.vorname << "\n"; 
    }
    

    gruß elwida

    Vielen dank jetzt klappt es 🙂 🙂 aber ich glaube das

    datei>>testuser.name>>'\0'; 
    datei>>testuser.vorname>>'\0';
    

    muss wohl eher so heißen

    datei<<testuser.name<<'\0'; 
    datei<<testuser.vorname<<'\0';
    


  • jepp stimmt 🙄

    gruß elwida


Anmelden zum Antworten