ostringstream in char



  • Hallo,

    hatte ja gestern mit eurer Hilfe die Fähigkeiten eines ostringstream in kombination mit setprecision() kennen gelernt, doch nun stellt sich mir ein Problem.

    Ich will den Inhalt des ostringstream wieder in ein char umwandeln.
    Wie geht das?

    Danke
    MISCHU



  • Welchen Wert sollte denn ein char haben der zB "Hallo Welt" aufnehmen kann?

    btw: wenn du char* meinst. Schau dir mal die Method str() an - vielleicht lässt sich damit ja was drehen...



  • hi probiers mal so:

    ostringstream s;
    sstr << "Hallo";
    char *c = s.c_str();
    

    oder sonst schau mal da:
    http://cplus.kompf.de/artikel/stream4.html

    cu surf.



  • ich meinte so:
    s << "Hallo";

    cu



  • Ne irgendwie klappt das so noch nicht.
    Sonst noch Möglichkeiten?

    Danke
    MISCHU



  • MISCHU schrieb:

    Ne irgendwie klappt das so noch nicht.
    Sonst noch Möglichkeiten?

    Ja: Fehlermeldung posten.
    btw: ersetze char* mal durch char const*



  • und ersetze

    char const *c = s.c_str();
    

    durch

    char const *c = s.str().c_str();
    


  • Ne er wehrt sich immernoch...

    beim compilieren gibt es zwar mit der const-Variante keine Fehler mehr aber die Ausgabe stimmt immernoch nicht.

    Sieht so aus: ÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝp

    Hoffe,d ass ich die entscheidenden Codestücke zusammengesammelt habe und ihr mir helfen könnt.

    char const *korrektbp;
    char produktionsprotokoll[19000];
    
    lstrcpy (produktionsprotokoll,"PRODUKTIONSREPORT.txt\n");
    strcat (produktionsprotokoll, korrektbp);
    strcat (produktionsprotokoll, " %\n");
    
    std::ostringstream stream;
    stream.precision(2);
    stream << std::fixed << korrekte_produkte_proz;
    
    korrektbp = stream.str().c_str();
    

    Danke euch
    MISCHU



  • Hi!

    Habe eben folgendes Programm versucht auszuführen. Kompilieren und Linken ging einwandtfrei. Allerdings steht in mychar nichts drin:

    #include <iostream>
    #include <sstream>
    #include <string>
    #include <cstring>
    
    int main()
    {
    	using namespace std;
    	ostringstream out;
    	out << "Hallo\0";
    	char const *mychar = out.str().c_str();
    	cout << strlen(mychar) << std::endl;
    	cin.clear();
    	cin.sync();
    	cin.get();
    	return 0;
    }
    

    Wenn ich strlen(mychar) durch out.str().c_str() ersetzt habe, kam etwas raus. So wie es jetzt ist, ist mychar immer leer.
    Habe Kompiliert mit dem VC++7.

    Code-Hacker



  • Hallo!

    Folgendes Funktioniert:

    #include <iostream>
    #include <sstream>
    #include <string>
    #include <cstring>
    
    int main()
    {
    	using namespace std;
    	ostringstream out;
    	out << "Hallo";
    	std::string mstring = out.str();
    	const char *mychar = mstring.c_str();
    	cout << mychar << std::endl;
    	cin.clear();
    	cin.sync();
    	cin.get();
    	return 0;
    }
    

    Ich weise es erst einem std::string zu und dann mystring und dann funktioniert es auch.

    Code-Hacker



  • D'Oh!

    out.str() gibt doch ein temporäres Objekt zurück. Nach der Zeile ist es nicht mehr gültig. Dein Zeiger zeigt also ins Nichts.



  • Hi!

    Stimmt, per Speicheranforderung musste es ja funktionieren. Außerdem hat man einen char* und keinen const char* mehr.
    Allerdings muss der Speicher den man frei gibt doch ein Array sein, also

    delete[] mychar;
    

    ?

    Code-Hacker



  • also direkt nach der konvertierung geht es ... als golable Variable klappt's allerdings noch nicht.

    Hatte es so: const char *korrektbp; als globale Variable deklariert.
    Dann im Programm so gesetzt: korrektbp = mstring.c_str();

    Dann wird wieder so'n misst angezeigt: YYYYYYYYYYYYYYYYYYYYYYYp
    wenn ichs im Programm so bennen: *korrektbp = mstring.c_str();

    ist das Teil leer.
    Woran liegts ?

    MISCHU


Log in to reply