kommische zeichen am stringende...



  • guten abend

    ich habe ein problem mit dem einlesen und speichern von dateien mit strings,

    einlesen tu ich so:

    datei = file;
    	ifstream datei(file.c_str());
    
    	datei.seekg(0,ios::end);
    	int length = datei.tellg();
    	datei.seekg(0,ios::beg);
    
    	char* buffer = new char[length];
    
    	datei.read(buffer,length);
    
    	data = buffer;
    
    	datei.close();
    

    speichern so:

    string tmp ="blabla.txt";
    ofstream out(tmp.c_str(),ios::out);
    out << tmp;
    out.close();
    

    das problem nach dem laden der datei: im string habe ich so schei** zeichen am schluss wie z.b diese hier "ÍÍÍÍÍÍÍÍýýýýÝÝÝÝÝÝÝÝÝÝÝ" welche ich nicht wegbekomme(erase,replace,ect)
    die befinden sich nachher bei kopieren auch wieder in der datei, verursacht bei mir zwar keinen fehler, aber sieht sehr hässilch aus, muss das sein, oder wie kann ich dies verhindern

    grussreima


  • Mod

    out << tmp;
    

    hier befindet sich im ausgabestream dann kein terminator, welcher aber hier

    data = buffer;
    

    benötigt wird.



  • camper schrieb:

    out << tmp;
    

    hier befindet sich im ausgabestream dann kein terminator, welcher aber hier

    data = buffer;
    

    benötigt wird.

    Und wie kriege ich diese terminator weg? respektive wie lösche ich den?



  • das sieht sowieso sehr umständlich aus, aber, wie camper schon schrieb:

    out << tmp << '\0';
    


  • net schrieb:

    das sieht sowieso sehr umständlich aus, aber, wie camper schon schrieb:

    out << tmp << '\0';
    

    wie würdest es denn du machen, das es nicht mehr umständlich ist??



  • hi!!

    ich denke es liegt daran das du dich verproggt hast.



  • net schrieb:

    das sieht sowieso sehr umständlich aus, aber, wie camper schon schrieb:

    out << tmp << '\0';
    

    *LOL*



  • reima schrieb:

    wie würdest es denn du machen, das es nicht mehr umständlich ist??

    // speichern
        string tmp ="blabla.txt"; 
        ofstream out(tmp.c_str(),ios::out); 
        out << tmp;
        out.close(); 
    
        // laden
        string tmp2;
        ifstream datei(tmp.c_str()); 
        datei >> tmp2;
        datei.close(); 
        cout << tmp2 << endl;
    


  • net schrieb:

    reima schrieb:

    wie würdest es denn du machen, das es nicht mehr umständlich ist??

    // speichern
        string tmp ="blabla.txt"; 
        ofstream out(tmp.c_str(),ios::out); 
        out << tmp;
        out.close(); 
    
        // laden
        string tmp2;
        ifstream datei(tmp.c_str()); 
        datei >> tmp2;
        datei.close(); 
        cout << tmp2 << endl;
    

    hab ich auch schon probiert beim laden, es liest aber immer nur die erste Zeile der Datei aus.



  • irgendwie habe ich gerade gemerkt das das problem mit anhängen des zeichens '\0' nicht wirklich behoben werden konnte....

    gibts sonst noch ne möglichkeit den fehler zu beheben?

    gruss reima



  • reima schrieb:

    irgendwie habe ich gerade gemerkt das das problem mit anhängen des zeichens '\0' nicht wirklich behoben werden konnte....

    gibts sonst noch ne möglichkeit den fehler zu beheben?

    gruss reima

    natürlich kann dein problem mit anhängen eines '\0' gelöst werden. aber wahrscheinlich nicht beim schreiben sondern beim lesen.
    versuche es eimal so.

    #include <iostream>
    #include <fstream>
    #include <string>
    
    using namespace std;
    
    int main() {
        // speichern
        string fname ="blabla.txt";
        string tmp ="blabla blablabla \n und noch mehr blahblah\nletzte zeile";
    
        ofstream out(fname.c_str(),ios::out);
        out << tmp;
        out.close();
    
        // alles auf einmal laden
        ifstream datei(fname.c_str());
    
        datei.seekg(0,ios::end);
        size_t length = datei.tellg();
        datei.seekg(0,ios::beg);
    
        char* buffer = new char[length+1]; // platz für stringendebezeichner
    
        datei.read(buffer,length);
        datei.close();
    
        buffer[length]='\0';  // '\0' anhängen
        string tmp2(buffer);
    
        cout << tmp2 << endl; 
        return 0;
    }
    

    output

    blabla blablabla
    und noch mehr blahblah
    letzte zeile

    Kurt


Anmelden zum Antworten