Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » strstream oder stringstream

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
16.09.2003, 18:25 Uhr
Christian
C/C++ Master
(Operator)


Hallo zusammen,

heißt die Klasse denn nun strstream oder stringstream? Also stringstream kennt bei mir kein Compiler bzw. keine Header strstream schon. Ich frage deshalb, weil ich auf:

www.cplusplus.com

die Docu der Klasse gesucht habe und dann nur auf stringstream gestoßen bin.

Was gehört denn in den Standard?

Christian grüßt
--
Grüße, Christian

Dieser Post wurde am 16.09.2003 um 18:25 Uhr von Christian editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.09.2003, 18:39 Uhr
0xdeadbeef
Gott
(Operator)


stringstream. Der Header heißt sstream. Beispiel:

C++:
#include <sstream>
#include <iostream>

int main()
{
  std::stringstream s;
  int i;

  s.str("123");
  s >> i;
  std::cout << i << std::endl;  
}


Das deswegen, weil es auch Dateisysteme gibt, die nur 8.3-lange Dateinamen unterstützen (e.g. FAT) und C++ auch da kompilierbar sein muss.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.09.2003, 11:22 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat:
0xdeadbeef postete
stringstream. Der Header heißt sstream.
...
Das deswegen, weil es auch Dateisysteme gibt, die nur 8.3-lange Dateinamen unterstützen (e.g. FAT) und C++ auch da kompilierbar sein muss.



Na, das war wohl eher Faulheit. Denn würde Deine Annahme stimmen, dann dürfte es auch nicht den Standardheader <algorithm> geben...

P.S.: Gute Güte, gibt es denn niemand Unfehlbaren mehr, lieber Gott?

P.P.S: Womit mal klar wäre, das ISO FAT basierte Betriebssysteme als nicht ernstzunehmende Randerscheinungen ansieht...
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 17.09.2003 um 11:23 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.09.2003, 13:51 Uhr
Christian
C/C++ Master
(Operator)


Danke.

Die Klasse strstream gibt es aber dennoch. Ist der einizge Unterschied der beiden der, dass stringstream auf den STL Typ string abzielt (vgl. die Methode str()) und strstream direkt auf char*?

Wieso gibt es sonst die beiden Klassen und nicht nur stringstream?
--
Grüße, Christian
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
17.09.2003, 14:08 Uhr
virtual
Sexiest Bit alive
(Operator)


In Vor Standardzeiten gab es bereits eine strstream Klasse, die im Zuge der Standardisierung von stringstream abgelöst wurde. Aus Kompatibilitätsgründen wird der Header strstream.h und die Klasse strstream noch öfters mitgeliefert. Von der Verwendung der strstream Klasse ist jedoch dringend abzuraten, nicht nur, weil sie nicht mit zum Standard gehört: sie lädt zu Speicherlöchern ein. Das liegt daran, daß strstream::str() nicht einen std::string, sondern einen char* liefert.

Während man mit stringstream sowas hier ziemlich gefahrlos schreiben kann:

C++:
void f()
{
   int x;
   std::stringstream strm;
   strm<<"Hallo, x liegt an Addresse "<<&x<<std::endl;

   std::cout<<strm.str(); //!! <<- Hier
}


Würde die gleiche routine mit strstream ein Speicherloch erzeugen:

C++:
void f()
{
   int x;
   strstream strm;
   strm<<"Hallo, x liegt an Addresse "<<&x<<std::endl;

   std::cout<<strm.str(); //!! <<- Hier jetzt speicherloch, wenn folgende Zeile nicht hinzugefügt wird:
    strem.freeze(false);
}


Dh. per default geht strstream hin und schenkt dem Aufrufer den Rückgabewert von str, mit der Konsequenz, da das "Geschenk" kein Objekt einer Klasse ist, daß man es per Hand entfernen muß. freeze bewirkt, daß es wirklich abgeräumt wird.

EDIT: Ich hoffe erwähnt zu haben, daß strstream nicht Standard ist.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 17.09.2003 um 14:14 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
17.09.2003, 14:48 Uhr
Christian
C/C++ Master
(Operator)


Ahja.

=> am besten einfach stringstream verwenden

Da mir die string Klasse eh sehr entgegenkommt ist mir die Arbeit mit stringstream eh lieber als mit strstream.

Danke für die Infos.
--
Grüße, Christian
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
17.09.2003, 14:53 Uhr
0xdeadbeef
Gott
(Operator)


Um das mal klarzustellen: Ich bin unfehlbar. Ich bin aber auch allmächtig, und deshalb kann ich mich auch irren. Ich müsste es nicht, aber ich kann es - und du weißt ja, warum man Berge besteigt oder bei jedem Prepatch seinen Kernel aktualisiert.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
17.09.2003, 15:40 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat:
0xdeadbeef postete
Ich bin aber auch allmächtig

Na, wie war das doch gleich:
Mensch: "Lieber Gott, wenn Du allmächtig bist, kannst Du doch jeden Stein hochheben?"
Gott: "Ja"
Mensch: "Lieber Gott, wenn Du allmächtig bist, kannst Du doch jeden beliebigen Stein erschaffen?"
Gott: "Ja"
Mensch: "Dann bist Du nicht allmächtig, weil Du keinen Stein erschaffen kannst, den Du nicht hochheben kannst oder aber eben nicht alle Steine hocheben kannst!"

Also: das mit dem Gott glaube ich Dir aufs Wort. Das mit dem allmächtig aber nicht
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
17.09.2003, 16:06 Uhr
0xdeadbeef
Gott
(Operator)


Na toll, jetzt willst du mir nicht mal das letzte Wort lassen. Natürlich bin ich allmächtig. Ich kann jeden Stein heben, und ich kann jeden Stein erschaffen. Ich kann auch einen Stein erschaffen, den ich nicht hochheben kann, und ich kann auch einen Stein hochheben, den ich nicht hochheben kann. Ist doch ganz logisch - wenn man das Widerspruchsaxiom nicht fordert. Und dass das für mich nicht gilt, solange ich das nicht will, dürfte klar sein.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
19.09.2003, 14:52 Uhr
Bruder Leif
dances with systems
(Operator)


...und weil's so schön war, beweist der Mensch noch schnell, daß schwarz gleich weiß ist, und wird kurz darauf auf einem Zebrastreifen überfahren...
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: