fstream - ich mach was falsch?
-
Der Buffer ist nicht 0-terminiert.
-
und wie mache ich das?!?!
bzw. kann man die datei auch in einen String reinlesen? ich habs so versucht:
FStream.read (myString.c_str(), FileSize);
doch das ging irgendwie net gut
-
0-terminiert bedeutet, dass das letzte Zeichen im Buffer eine 0 sein muss.
-
Und zwar nicht '0' sondern '\0' = static_cast<char>(0)
-
Hi,
okay ich hab nun an der letzten Pos im Array \0 eingefügt
Buffer[FileSize] = '\0';
und es funzt, doch wie mach ich das denn nun mit dem String objekt?
-
Nimm einen std::vector<char> vec, dann hast du garantiert zusammenhängenden Speicher. Ein std::string kann auch anders implementiert sein. Wenn du die Daten eingelesen hast, kannst du mit std::string str(vec.begin(), vec.end()) den Inhalt des Vektors in den String kopieren, dabei wird er auch gleich nullteminiert.
Buffer kann übrigens an der Stelle nie NULL sein. (Und wenn es NULL wäre, wäre der Code vorher schon abgestürzt...)
-
recht umständlich um ein einfaches char array in einen string reinzustopfen, meinst du nicht? Ich mein, dafür extra einen vector benutzen? müsste doch auch einfacher gehen, oda?
-
Hier nochmal zwei Varianten. Welche besser ist, würde mich auch mal interessieren.
ifstream file(...); string x; copy(istreambuf_iterator<char>(file), istreambuf_iterator<char>(), back_insert_iterator<string>(x)); //oder stringstream temp; temp << file.rdbuf(); x = tmp.str();
-
DrGreenthumb schrieb:
ifstream file(...); string x; copy(istreambuf_iterator<char>(file), istreambuf_iterator<char>(), back_insert_iterator<string>(x));
Das sieht zumindest nicht sehr performant aus, wenn der String jedes Mal vergrößert wird...
Und naja, ein vector ist immerhin weniger Code und sicherer als new[]/delete[]. Das Design von basic_string ist aber auch nicht so mein großes Vorbild
-
Also folgender Vorschlag:
ifstream OpenFile("/home/stefan/code/temp/test.txt"); string ergebnis; char ch; while(!OpenFile.eof()) { OpenFile.get(ch); ergebnis.push_back(ch); }
Bei mir hat das wunderbar funktioniert
Stefan