getline() liefert seltsame Zeichen zurueck
-
Hallo,
hat jemand eine Idee? Oder hat jemand schon einmal solche einen String erhalten?
Ich parse eine Datei, sobald die Zeile weniger als 15 Zeichen hat, erhält der String <zeile> den Wert {"À¨2 ¨ ã"} anstatt "Mein Name ist H". Wenn ich <zeile> auf einen anderen String <test> kopiere, erhaelt der neue String den richtigen Wert. Wenn ich es wieder umkopiere auf zeile, wieder {"À¨2 ¨ ã"}....
std::string zeile;
while (...){
std::getline( file, zeile );
std::string test = inhalt;
inhalt = test;
...
}
...Danke, Roger R.
-
Hi,
du wirst dich irgendwo mit der Länge vertan haben. Der Code ergibt imho keinen Sinn und der Fehler ist auch so nicht nachvollziehbar, zudem hast duch den entscheidenden Teil, nämlich die Bedingung der While-Schleife, weggelassen.
-
CarstenJ schrieb:
Hi,
du wirst dich irgendwo mit der Länge vertan haben. Der Code ergibt imho keinen Sinn und der Fehler ist auch so nicht nachvollziehbar, zudem hast duch den entscheidenden Teil, nämlich die Bedingung der While-Schleife, weggelassen.
Die Bedingung ist egal.
Ich glaube irgendwo habe ich einen Denkfehler.
Ich hab es mal noch kleiner geschrieben, da kommt wieder Unsinn heraus.std::ifstream file;
file.open("C:\\test.txt");std::string zeile;
while(true){
getline(file, zeile);
};Irgendwann kommt bei zeile Unsinn heraus.
-
Jo, nämlich dann wenn der stream leer ist, weil alles aus der Datei gelesen ist.
Die Schleife bricht nämlich nicht ab nachdem alles eingelesen ist.Genau das selbe Problem hast Du vermutlich bei Deiner Bedingung, die ja aber egal ist.
MfG Jester
-
Nein, das einzulesende File geht weiter und die Bedingung ist hier wirklich egal.
Wie Ihr in meinem ersten Eintrag lesen konntet - kopiere ich ja den Wert von <zeile> auf <test> und <test> enthaelt den richtigen Wert.
Und wenn ich es wieder zuürck kopiere, kommt wieder der Unsinn heraus.
-
Also der Code den Du bis jetzt gepostet hast sieht korrekt aus.
Du kannst jetzt entweder weiter darauf beharren, daß alles andere unwichtig ist, oder Du postest einfach mal ein bißchen mehr Code (zum Beispiel ein lauffähiges Minimalbeispiel).
MfG Jester
-
Roger R. schrieb:
Hallo,
hat jemand eine Idee? Oder hat jemand schon einmal solche einen String erhalten?
Ich parse eine Datei, sobald die Zeile weniger als 15 Zeichen hat, erhält der String <zeile> den Wert {"À¨2 ¨ ã"} anstatt "Mein Name ist H". Wenn ich <zeile> auf einen anderen String <test> kopiere, erhaelt der neue String den richtigen Wert. Wenn ich es wieder umkopiere auf zeile, wieder {"À¨2 ¨ ã"}.FEHLER:
kann nicht std::string und std::wstring Variables Correctly In Visual C++ .NET Debugger anzeigenUrsache:
Wenn die Länge weniger als 15 Zeichen beträgt, wird der std::string- oder der std::wstring-Variable als statischer Puffer gespeichert. Wenn die Länge der Zeichenfolge größer als 15 Zeichen ist, wird die Zeichenfolge als ein Zeiger auf Speicher gespeichert.Lösung:
Die Komponente Debugger, die Variablenwerte anzeigt, wird als Expression Evaluator (EE) bezeichnet. Eins Instanz EE verarbeitet den systemeigenen Code und die andere Instanz verarbeitet den verwalteten Code. Die autoexp.dat-Datei stellt Anpassung für das systemeigene EE bereit und die Mcee_mc.dat-Datei stellt Anpassung von verwaltetem EE bereit. Ändern Sie die autoexp.dat-Datei, um dieses Problem zu beheben.
-
Danke, ssm.
Hab es mir schon fast gedacht, dass dort der Fehler liegen muß.
Vielen Dank nochmal.