Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » stringstream rdbuf()

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 ] > 2 <
010
30.09.2005, 12:54 Uhr
~nakaa11
Gast


virtual,
eigentlich waren das zwei probleme: nummer eins ist nun klar wie ich einen streambuffer zweimal auslesen kann. danke auch für deinen gebastelten stream.
nummer zwei ist folgendes. ich schreibe gerade meinen code von nem gcc2x auf einen gcc3x kompiler um. es gab äderungen beim stringstream klassen standard. mein altes codefrakment schaut so aus.

Code:
void error_output_class::tofile(char *name){
  (*this).flush();
    ostrstream merr_name;
    merr_name<<"merr";
    merr_name<<"\0";
    delete[] filename;
    filename=merr_name.str();
  }



filename ist ein static char *, private variable eines externen objekts einer classe.

Änderung in stringstream klassen:

Code:
void error_output_class::tofile(char *name){
  (*this).flush();
    ostringstream merr_name(ostringstream::out);;
    merr_name<<"merr";
    merr_name<<"\0";
    //delete[] filename;
    filename=merr_name.str().c_str();
  }



wenn ich jetzt in einem anderen teil des programms filename aufrufe, steht wundersamerweise nicht mehr drin was ich in filename=merr_name.str().c_str(); nachweislich reingeschrieben habe. nachdem ich ausschließlich diese routine geändert habe, muss ich doch einen fehler beim der internen stream verwaltung machen, oder?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
30.09.2005, 12:56 Uhr
~nakaa11
Gast


hups im zweiten codefakment heißt es übrigens:


Code:
filename=(char*)merr_name.str().c_str();

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
30.09.2005, 13:26 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat von ~nakaa11:
virtual,
filename ist ein static char *, private variable eines externen objekts einer classe.

Änderung in stringstream klassen:

Code:
void error_output_class::tofile(char *name){
  (*this).flush();
    ostringstream merr_name(ostringstream::out);;
    merr_name<<"merr";
    merr_name<<"\0";
    //delete[] filename;
    filename=merr_name.str().c_str();
  }





Dann ist das ein schwerwiegender Programmierfehler: "merr_name.str().c_str();" Darf man nicht machen, weil str() nur ein temp. Objekt zurüclkgibt und c_str() dann in den Wald zeigt. Es wäre besser entweder filename zu einem std::string zu machen (was implizit eine Kopie vom Rückgabewert von str() macht) oder aber - falls dies nicht machbar ist -

C++:
    //delete[] filename;
    filename=merr_name.str().c_str();


ersetzen durch

C++:
    delete[] filename;
    std::string tmp_filename = filename=merr_name.str();
    filename = new char[tmp_filename.length()+1];
    strcpy(filename, tmp_filename);


... Ich wäre Dir aber empfehlen filename in ein std::string zu wandeln, ist deutlich sauberer.
--
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
013
30.09.2005, 14:50 Uhr
~nakaa11
Gast


HAHAHAHAHAHAHAAAAAAAAAAAAAAAAA!
it works!
mann virtual, wenn ich deine adresse wüßte würde ich ne pulle wein vorbeischicken. ich sitz seit drei tagen an der chose! habe die unelegante methode gewählt. sonst muß ich fünfzigtausendmal filename.c_str() schreiben und das gibt dann segmentation faults.
tausend dank!!!!!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
30.09.2005, 15:02 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat von ~nakaa11:
HAHAHAHAHAHAHAAAAAAAAAAAAAAAAA!
it works!
mann virtual, wenn ich deine adresse wüßte würde ich ne pulle wein vorbeischicken.


Das ist ja ne tolle Ausrede, keine Flasche Wein zu schicken! - Fragen kost doch nix

Zitat:

ich sitz seit drei tagen an der chose! habe die unelegante methode gewählt. sonst muß ich fünfzigtausendmal filename.c_str() schreiben und das gibt dann segmentation faults.
tausend dank!!!!!

Ja, das sind beliebte Fehler und dann auch echt schwer zu finden. Du solltest mal valgrind ausprobieren, falls Du unter Linux arbeitest. Ist ne feine Sache.
--
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
015
30.09.2005, 15:42 Uhr
~nakaa11
Gast


aha, werd ich mal probieren!
steinig und weit ist der weg zum c++ programmierer.
schönes wochenende!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ 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: