Seltsames Konvertierungsproblem



  • Hallo!

    Ich habe eine Funktion:

    const char* CConvert::IntToChar (int p_nInt)
    {
    	// stringstream buffer
    	std::stringstream m_ssStringStreamBuffer;
    
    	// convert int to const char*
    	m_ssStringStreamBuffer << p_nInt;
    
    	return m_ssStringStreamBuffer.str ().c_str ();
    }
    

    Und hier will ich den const char* in eine Datei schreiben:

    m_ofStream.open ("Highscore.txt"); // , std::ios::binary);
    
    	m_ofStream << cConvert.IntToChar (500);
    
    	m_ofStream.close ();
    

    In der Datei steht dann z.B.:

    5žy oder 5€l usw. jedesmal was anderes

    Ich weiß nicht ob es an der Konvertierung liegt, oder am ofStream...

    Danke schonmal,
    Viele Grüße Bizarreofnature!



  • P.S. Wenn ich die Funktion teste mit:

    if (strcmp (cConvert.IntToChar (500), "500") == 0)
    	{
    		exit (0);
    	}
    

    Klappt es fehlerfrei.

    Das Seltsame ist, auch das hier klappt fehlerfrei:

    m_ofStream << "500";
    


  • Der string lebt nicht mehr, wenn die Funktion beendet wird. Warum benutzt du char* statt std::string?

    Die Funktion gibt’s schon http://en.cppreference.com/w/cpp/string/basic_string/to_string

    Und strcmp? In C++?



  • manni66 schrieb:

    Der string lebt nicht mehr, wenn die Funktion beendet wird. Warum benutzt du char* statt std::string?

    Die Funktion gibt’s schon http://en.cppreference.com/w/cpp/string/basic_string/to_string

    Und strcmp? In C++?

    mit

    .str ().c_str ()
    

    konvertiere ich doch zu const char* oder?

    Was ist die Alternative zu strcmp für C++?

    Ich arbeite mit char weil ich diesmal mit char arbeiten wollte. In diesem Projekt halt.



  • Meines Wissens ist der Operator << für Integer überladen. Daher brauchst du deine Funktion gar nicht.
    Ich weiß aber auch gar nicht, ob deine Funktionsaufrufe legitim sind. Diese Formatierung mit einer Leerstelle zwischen Funktionsbezeichner und Klammern der Argumenteliste.
    Dass std::ios::binary im Zusammenhang mit Strings sinnfrei ist, ist dir hoffentlich bewusst.
    Die Fehlerquelle ist aber wohl, dass der Speicherplatz des Strings am Ende der Funktion freigegeben wird und du deshalb nicht mehr darauf zugreifen kannst.
    Nimm std::string. Oder noch besser: lass die Funktion weg.



  • Ok danke erstmal 🙂 . Ich werde das ganze jetzt mit std::string überarbeiten.
    Wenn es dann noch was gibt, melde ich mich wieder.

    Allerdings würde ich noch gerne die C++ Alternative zu strcmp wissen.



  • Bizarreofnature schrieb:

    Allerdings würde ich noch gerne die C++ Alternative zu strcmp wissen.

    ==

    Natürlich std::string oder std::string_view.



  • // too late.



  • Bizarreofnature schrieb:

    Ich arbeite mit char weil ich diesmal mit char arbeiten wollte. In diesem Projekt halt.

    Ich schieße mir in den Fuß, weil ich mir in den Fuß schießen wollte. Und hinterher frage ich, warum es Aua macht.



  • Meines Wissens ist der Operator << für Integer überladen. Daher brauchst du deine Funktion gar nicht.

    Das war tatsächlich der Fehler.

    Vielen Dank an alle 🙂



  • Bizarreofnature schrieb:

    Das war tatsächlich der Fehler.

    Mallala schrieb:

    Die Fehlerquelle ist aber wohl, dass der Speicherplatz des Strings am Ende der Funktion freigegeben wird und du deshalb nicht mehr darauf zugreifen kannst.

    DAS ist der Fehler.



  • Schau, dass du C++ richtig lernst. Ich habe in der Ausbildung C++ 2 Jahre so gelernt, wie du es machst. Der Dozent meinte immer, "nach der Ausbildung seid ihr fitt in C++". Nach der Ausbildung wollte ich dann loslegen, aber scheiße wars. Mein Ausbildungszeug genommen, in den Müll geworfen, und von vorne angefangen zu lernen. Es gleich richtig zu machen, spart so viel Zeit und Frust.


Anmelden zum Antworten