Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

strstream Spezialisierung von iostream auf Felder

&pagelevel(3)&pagelevel


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

{
public:enum open_mode {in, out, ate, app, trunc, nocreate, noreplace,

bin, tabexp};

// sowie viele weitere, siehe ios ...

};

#include <strstream.h>

class strstreambase : public virtual ios

{

public:

strstreambuf* rdbuf();

};

class istrstream : public strstreambase, public istream

{

public:

istrstream(char*);
istrstream(char*, int);
istrstream(const char*);
istrstream(const char*, int);
 ˜istrstream();

};

class ostrstream : public strstreambase, public ostream

{

public:


ostrstream();
ostrstream(char*, int, int=ios::out);
 ˜ostrstream();

int
char*

pcount();
str();

};

class strstream : public strstreambase, public iostream

{

public


strstream();
strstream(char*, int, int mode);
 ˜strstream();

char*

str();

};



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

  • ss vom Typ strstream ist.
  • iss vom Typ istrstream ist.
  • oss vom Typ ostrstream ist.
  • mode eine int-Zahl ist, die open_mode darstellt.

Konstruktoren

istrstream(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-Elemente

strstreambuf * ssb = iss.rdbuf()
strstreambuf * ssb = oss.rdbuf()
strstreambuf * ssb = ss.rdbuf()

rdbuf() darf nur in abgeleiteten Klassen verwendet werden. Die Funktion liefert dasmit iss/oss/ss verknüpfte strstreambuf-Objekt.

ostrstream-Elemente

char * 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-Element

char * 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


 istream, sstreambuf