ostringstream in char



  • 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


Anmelden zum Antworten