Was macht istringstream.str(char*) genau?

Hallo erstmal.

Was macht die Methode str(char*) der Klasse istringstream eigentlich genau? Ich habe nämlich den Eindruck, dass Sie den char-Zeiger nicht tief, sondern nur flach kopiert.
Ich habe das Problem, dass ich aus einer Datei Daten in einen istringstream einlesen muss. Das hatte ich folgendermaßen gelöst:

void fill(istringstream& istr);
{
ifstream file;
char* puffer;
file.open(…);
file.seekg(…);

puffer = new char[size];
file.read(puffer, size);
puffer[size] = ‚\0‘;
istr.str(puffer);
delete[] puffer;
return;
}

Bei dieser Lösung hatte ich bei mehrmaliger Ausführung dieser Routine (eigentlich eine Methode einer Klasse) auf demselben istringstream Programmabstürze, in denen ich kein Muster finden konnte.
Ich bin dann dazu übergegangen, den puffer als Elementvariable der Klasse zu deklarieren, und seinen Speicherbereich offenzuhalten, bis die Methode neu aufgerufen wird:
{
istr.str("");
istr.clear(); // istringstream löschen, und Flags neu setzen.
if (puffer)
delete[] puffer;
// Rest wie oben
}

Seitdem scheint die Methode sauber zu arbeiten. Aber ich bin mir nicht sicher, ob das so bleiben wird.

Vielen Dank im Voraus,
Bernhard.

istringstream() ist der konstruktor der klasse strstream und gehoert zum alten cpp i/o system. (enthalten in )
darin enthalten ist die char *str() fkt - diese „friert“ in array ein.

du redest, so nehme ich an, von der istringstream des neuen ansi/iso standards - enthalten in .
es gibt zwei versionen:
string str() const; und
void str(string &foo);
die erste fkt liefert ein string-objekt zurueck, das die aktuellen inhalte des string-basierten streams enthaelt.
die zweite fkt gibt den string frei, der momentan in dem string-stream enthalten ist und ersetzt diesen durch den mit foo bezeichneten string.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Danke, aber hilft leider nicht

du redest, so nehme ich an, von der istringstream des neuen
ansi/iso standards - enthalten in .
es gibt zwei versionen:
string str() const; und
void str(string &foo);
die erste fkt …
die zweite fkt …

Hallo Mike.

Vielen Dank für die Antwort.
Leider kenne ich diese beiden Methoden schon. Sind das sicher alle überladenen Methoden? Wenn das alle sind, dann verstehe ich nicht, wieso mein Borland-Compiler str(char*) schluckt. Er tut es wirklich, ich schwöre. Und es funktioniert auch - wenn ich auch nicht genau weiß, was da passiert.
Es muss diese Überladung der Methode geben. Ein automatischer Cast in string ist nicht möglich. (string)char* gibt bei mir die Fehlermeldung: „Cannot Cast from ‚char * *‘ to ‚string‘.“
Oder übersehe ich etwas?

Gruß,
Bernhard.