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 verhinderngrussreima
-
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 zeileKurt