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