Wenn ich den folgenden Code ausführen, foobar_fname
durch den Inhalt von foobar_fname
wenn getline
läuft überschrieben wird:Warum überschreibt std :: getline das char-Array mit dem Dateinamen?
ostringstream st_foobar_fname;
st_foobar_fname << foostr << BAR_CONST << barstr;
const char *foobar_fname = (st_foobar_fname.str()).c_str();
ifstream foobar_file(foobar_fname);
debug("Reading '%s'", foobar_fname);
string foobar_def = "";
if (getline(foobar_file, foobar_def)) {
debug("'%s' reported message '%s'", foobar_fname, foobar_def.c_str());
} else {
error("Unable to read '%s'", foobar_fname);
}
Zum Beispiel, wenn foobar_fname=/home/user/fname
und /home/user/fname
enthält 'simple-Text-Inhalt', sieht die Ausgabe wie:
Reading '/home/user/fname'
'simple-text-content' reported message 'simple-text-content'
wenn jedoch /home/user/fname
nicht vorhanden ist (und getline
ausfällt), ist der Ausgang korrekt:
Reading '/home/user/fname'
Unable to read '/home/user/fname'
Wohin gehe ich falsch?
(Dies ist ein Stück alten Code, für den ich keine neuen Abhängigkeiten einführen möchte, also C++ 11, boost, etc sind keine praktikablen Lösungen).
Könnten Sie bitte so freundlich sein und die Verwendung mit einem [MCVE] bieten, hier ist [etwas für den Anfang] (http://coliru.stacked-crooked.com/a/d4727423864d880e). (oder versuchen Sie es zumindest mit Ideone, die Standardeingabe ist dort einfacher) –