Problem mit char* im return



  • Danke! Das hilft mir schonmal.
    Ich hab nur noch das Problem, das ich die draw Funktion nicht ändern kann, weil sie ein fester Bestandteil von einer libary ist(also ein Befehl).

    Wie kann ich das machen das ich den ostringstream als char* benutzen kann?

    Gruß



  • ostr.str().c_str()
    

    liefert den char* im string im ostringstream 🙂



  • Phille schrieb:

    ...
    Wie kann ich das machen das ich den ostringstream als char* benutzen kann?

    Gruß

    Vielleicht ist di aufgefallen, dass ich Draw gar keinen ostrngstream übergeben sondern einen string. Dafür hat ostringstream die Funtion str().
    Genauso hat string die Funktion c_str(), um einen char const * zu bekommen (und mehr als einen "const" sollte ein Funktion namens "Draw()" auch nicht brauchen).

    Gruß,

    Simon2.



  • Oh man...
    Ist zwar char* aber const.
    Sh*t!

    Const nimmt er nicht.

    Gibt es eine möglichkeit das wegzubekommen?

    Phille



  • Ups google gibts ja auch noch!
    Habs gefunden:

    char* str = new char[50];
    memcpy(str, ostr.str().c_str(), 50);
    

    Danke an alle für die Hilfe!

    PhiLLe



  • nur dass du statt der hardcodierten 50 schon die Länge des strings im ostringstream nehmen solltest, sonst gibts wieder bufferproblemchen



  • PhiLLe schrieb:

    Oh man...
    Ist zwar char* aber const.
    Sh*t!...

    Auftrag an Dich: 6-12 Schläge mit der Rute an den Programmierer von Draw() austeilen.
    Die ersten 2/3 Hälfte für das fehlende const und das letzte für char* statt string.

    Gruß,

    Simon2.



  • PhiLLe schrieb:

    Ups google gibts ja auch noch!
    Habs gefunden:

    char* str = new char[50];
    memcpy(str, ostr.str().c_str(), 50);
    

    Danke an alle für die Hilfe!

    PhiLLe

    hier wäre noch zu erwähnen, dass es hässlich ist, sich selbst um die dynamische speicherverwaltung zu kümmern weil immer viel zu viel schiefgeht und du am ende nur memory leaks hast. verwende std::vector (im kommenden standard gibt es eventuell std::dynarray , das für diesem fall besser geeignet wäre):

    #include <vector>
    //...
    
    vector<char> str(your_string.begin(), your_string.end()); //no new, no delete
    Draw (&str[0]);
    


  • Simon2 schrieb:

    PhiLLe schrieb:

    Oh man...
    Ist zwar char* aber const.
    Sh*t!...

    Auftrag an Dich: 6-12 Schläge mit der Rute an den Programmierer von Draw() austeilen.
    Die ersten 2/3 Hälfte für das fehlende const und das letzte für char* statt string.

    Und 5/3 weil Draw nicht Unicode fähig ist, ach das wäre sie ja mit std::string auch nicht.



  • unicoder schrieb:

    ...Und 5/3 weil Draw nicht Unicode fähig ist, ach das wäre sie ja mit std::string auch nicht.

    🤡 🤡
    Nochmal je 5, weil string nicht multithreadfähig, C++ nicht javafähig und Selbstprogrammieren sowieso nicht DAU-sicher ist.....

    Gruß,

    Simon2.


Anmelden zum Antworten