Mysteriöse Zeichen beim Datei einlesen
-
Hi,
ich bin noch ziemlich neu bei C++.
Ich wollte ein Programm schreiben, welches eine beliebige Datei einlesen kann.
Das funktioniert soweit auch ganz gut, aber ich frage mich woher die zusätzlichen Zeichen kommen?
Wäre super wenn mir das jemand erklären könnte.Inhalt der Datei:
Blablada bliblablupAusgabe Des Programmes:
Blablada bliblablup=²²²²½½½½½½½½Methode zum auslesen der Datei:
char * loadFile(ifstream &istream) { size_t size; char *buffer; streamoff curpos=istream.tellg(); istream.seekg(0,ios::end); size=istream.tellg(); istream.seekg(curpos); buffer=new char[size]; istream.read(buffer,size); cout<<buffer<<endl; return buffer; }
-
du musst noch ein nullzeichen an den stirng hinten anhängen, sonst weiß der computer nicht, wo der string zuende ist
-
Und dein Code ist so nicht ganz sinnig:
void load_file(std::ifstream& in, char* dest, std::size_t max_size) { const std::streampos pos_cur(in.tellg()); in.seekg(0, std::ios::end); const std::streampos pos_end(in.tellg()); in.seekg(0, std::ios::beg); in.read(dest, std::min<std::size_>(max_size, pos_end) * sizeof(char)); in.seekg(pos_cur, std::ios::beg); }... Entweder, du lädst nur ab der Position wo der Cursor im Moment ist (dann ist size - pos_cur die richtige Größe und nicht nur size) oder du lädst die komplette Datei und gehst dann wieder an die alte Stelle.
-
Ich würde sowieso vorschlagen, du machst dir das Leben leicht und nutzt alle Möglichkeiten von C++, inklusive Strings und Iteratoren. Dann brauchst du dir um das Abschliessen deines char-Arrays mit einer 0 auch keine Sorgen mehr zu machen
.#include <iterator> #include <string> // ... string loadFile(ifstream &istream) { istream.unsetf(ios::skipws); string str = string(istream_iterator<char>(istream), istream_iterator<char>()); return str; } // oder noch eleganter void loadFile(ifstream &istream, string &str) { istream.unsetf(ios::skipws); str = string(istream_iterator<char>(istream), istream_iterator<char>()); } // und falls eben doch so ein frickliges Char-Array zurückgegeben werden muss char * loadFile(ifstream &istream) { istream.unsetf(ios::skipws); string str = string(istream_iterator<char>(istream), istream_iterator<char>()); char *buffer = new char[str.size() + 1]; strcpy(buffer, str.c_str()); return buffer; }Viel Spass noch und beste Grüsse
Kessi