In diesem Abschnitt wird die Klasse strstream beschrieben, die eine Spezialisierung von iostream ist. strstream stellt die Ein- und Ausgabeoperationen für Byte-Felder zur Verfügung. #include <iostream.h> class ios { bin, tabexp}; // sowie viele weitere, siehe ios ... }; #include <strstream.h> class strstreambase : public virtual ios { public: strstreambuf* }; class istrstream : public strstreambase, public istream { public: istrstream(char*); }; class ostrstream : public strstreambase, public ostream { public:
}; class strstream : public strstreambase, public iostream { public
}; | |||||||||
strstreambase stellt die Elementfunktion rdbuf() zur Verfügung. Es ist nicht beabsichtigt,Objekte vom Typ strstreambase zu definieren. strstream ist eine Spezialisierung von iostream für die Speicherung und die Entnahme von Werten aus Byte-Feldern. Der einem strstream-Objekt zugeordnete streambuf-Teilist vom Typ strstreambuf (siehe sstreambuf). Für die folgende Beschreibung wird angenommen, dass
Konstruktorenistrstream(char * cp) Zeichen werden aus der (mit 0 beendeten) Zeichenkette cp entnommen. Das abschließende Nullzeichen ist nicht Teil der Zeichenfolge. Suchvorgänge (istream::seekg()) sind in diesem Feld erlaubt. istrstream(char * cp, int len) Zeichen werden aus dem bei cp beginnenden Feld entnommen, das len byte lang ist.Suchvorgänge (istream::seekg()) sind an beliebiger Stelle im Feld erlaubt. ostrstream() Speicherbereich wird zur Aufnahme gespeicherter Zeichen dynamisch zugeordnet. ostrstream(char * cp, int n, int mode) Zeichen werden in dem bei cp beginnenden Feld, das n byte lang ist, gespeichert.Wenn ios::ate oder ios::app in mode gesetzt sind, wird angenommen, dass cp eine mit 0 endende Zeichenkette ist; das Speichern beginnt beim Nullzeichen. Anderenfalls wird bei cp mit der Speicherung begonnen. Suchvorgänge sind an beliebiger Stelle im Feld erlaubt. strstream() Speicherkapazität wird dynamisch zur Aufnahme der gespeicherten Zeichen zugewiesen. strstream(char * cp, int n, int mode) Zeichen werden in dem bei cp beginnenden Feld - mit der Länge von n Bytes -gespeichert. Wenn ios::ate oder ios::app in mode gesetzt sind, wird cp als mit 0 beendete Zeichenkette behandelt, und die Speicherung beginnt beim Nullzeichen. Im anderen Fall beginnt das Speichern bei cp. Suchvorgänge sind an beliebiger Stelle imFeld erlaubt. strstreambase-Elementestrstreambuf * ssb = iss.rdbuf() rdbuf() darf nur in abgeleiteten Klassen verwendet werden. Die Funktion liefert dasmit iss/oss/ss verknüpfte strstreambuf-Objekt. ostrstream-Elementechar * cp=oss.str() Ein Zeiger auf das verwendete Feld wird geliefert und das Feld "eingefroren". Nachdem str aufgerufen wurde, ist die Auswirkung eines versuchten Speicherns weiterer Zeichen in oss nicht definiert. Wenn oss mit einem explizit bereitgestellten Feld konstruiert wurde, ist cp ein Zeiger auf dieses Feld. Anderenfalls zeigt cp auf einen dynamisch zugewiesenen Bereich. Bis zum Aufruf von str() ist oss für das Löschen des dynamisch zugewiesenen Bereichs verantwortlich. Nach der Rückkehr von der Funktion str() gehört das Feld zum Zuständigkeitsbereich des Benutzerprogramms an. int i=oss.pcount() Die Anzahl der Bytes, die im Puffer gespeichert sind, wird geliefert. Diese Funktion ist hauptsächlich von Nutzen, wenn binäre Daten gespeichert wurden und oss.str() nicht auf eine mit 0 beendete Zeichenkette gerichtet ist. strstream-Elementchar * cp=ss.str() Ein Zeiger auf das verwendete Feld wird geliefert und das Feld "eingefroren". Nachdem Aufruf von str() ist die Wirkung eines Versuchs, weitere Zeichen in ss zu speichern, nicht definiert. Wenn ss mit einer expliziten Feldangabe angelegt wurde, ist cpein Zeiger auf das Feld. Im anderen Fall zeigt cp auf den dynamisch zugewiesenen Bereich. Bis zum Aufruf von str obliegt ss das Löschen des dynamisch zugewiesenen Bereichs. Nach der Rückkehr vom Funktionsaufruf str() gehört das Feld aber dem Verantwortlichkeitsbereich des Benutzerprogramms an. | |||||||||
BEISPIEL | Das folgende Programm definiert eine Zeichenkette str1 und liest diese mit dem Operator >> wie einen Eingabestrom. Jedes aus der Zeichenkette gelesene Zeichen wird nach cout ausgegeben. #include <iostream.h> #include <strstream.h> const char * const str1 = "Test-String zur Pruefung von strstream\n"; /* const wird verwendet, um sicherzustellen, dass die Zeichenkette */ /* und der Zeiger darauf nicht verändert werden können */ int main() { istrstream is((char*) str1); /* Variable is wird zur Verwendung der Zeichenkette str1 deklariert */ is.unsetf(ios::skipws); /* Standardmäßig überspringt istrstream Zwischenraum bei der */ /* Eingabe. Das Standardverhalten wird durch Löschen des Flags */ /* skipws verändert; Zwischenraum wird bei der Eingabe dann */ /* nicht mehr übersprungen */ while (EOF != is.peek()) { char c; is >> c; /* Beachten Sie: Auf die Zeichenkette wird wie auf eine */ /* Eingabezeichenkette zugegriffen. */ cout << c; } return 0; } Das Ergebnis der Programmausführung ist: Test-String zur Pruefung von strstream % CCM0998 Verbrauchte CPU-Zeit: 0.0007 Sekunden | ||||||||
SIEHE AUCH | |||||||||