Debug: Einfach Text wo ausgeben.



  • Hallo.

    Bin recht neu in C++ und nun fehlt mir eine sinnvolle Komponente der Programmierung: Werte ausgeben (Debugging).

    Nun gibt es durch WinAPI hierfür z.B. MessageBoxA() usw., aber wie kann ich den String mit einer Zahl kombinieren? Am liebsten hätte ich es so, dass ich Werte an ein bestimmtes Debugfenster geben könnte, das fand ich allerdings nicht.

    Bsp.: "Nummer: " + 2 führt bei mir zu MessageBox mit "Nummer: ". Wie lautet die Funktion mit der ich die Zahl in einen String umwandeln kann?



  • Hallo,

    Jag es doch einfach mit cout auf die Konsole raus, dann hast das Problem garnicht. Zum Umwandeln von Zahlen in strings würde ich Dir mal einen Blick in die FAQ empfehlen.

    MfG Jester



  • Hi,

    du koenntest die Klasse std::stringstream nutzen:

    #include <sstream>
    
    //irgendwo im sourcecode
    std::stringstream   SStr;
    int                 Nummer = 5;
    
        SStr << Nummer;     //5 ist jetzt als std::string in SStr enthalten
        SStr.str();         //liefert dir ein std::string-Objekt zurueck
        SStr.str().c_str(); //liefert dir ein const char * zurueck
    

    Damit solltest du erfolg haben.

    mfg
    v R



  • eine funktion zum umwandeln von zahlen in strings heißt so : "itoa" (oder "_fcvt" für floats).



  • Danke. itoa() war schon mal richtig.

    Leider sind es mir zu viele Zeilen Code nur um eine Zahl in einen String umzuwandeln, daher versuchte ich mich an der Funktion cstr(). Diese soll die Zahl Long empfangen und entsprechend umwandeln. Leider gibt sie nur die Adresse der lokalen (!) Variable aus. Das bringt mir wenig, immerhin wird diese wieder zerstört. Was tun? Globale Variablen sind keine Lösung.

    Ist es in C++ nicht möglich einfach nur Text zurückzugeben ohne eine Referenz darauf zu setzen? So, dass hier einfach 0 o.ä. zurückgegeben wird?

    char* cstr(long lngZahl) {
    	int j = 8 * sizeof(lngZahl) + 1;
    	char buffer[j];	
    	ltoa(lngZahl, buffer, 10);
    
    	return buffer;
    }
    


  • was meinst du mit "einfach nur den text zurückgeben".
    der text muss ja irgendwo gespeichert sein, nicht? und in c++ gibst du einfach die adresse des speicherorts, an dem der text ist zurück.
    lokal ist natürlich schlecht. du hast aber ausweichmöglichkeiten.
    du verwendest dynamisch angelegten speicher (den du in der funktion selbst anlegen musst, aber nicht vergessen darfst, ihn nachher wieder zu löschen)
    du übergibst der funktion einen zeiger auf freien speicherbereich, in den sie hineinschreiben soll.
    dein beispiel sollte allerdings nicht kompilieren, da "j" nicht compiletime-constant ist.
    was spricht nochmal gegen stringstreams?



  • char* cstr(long lngZahl) { 
        int j = 8 * sizeof(lngZahl) + 1; 
        char buffer[j];     // Wir programmieren hier C++ nicht C99
        ltoa(lngZahl, buffer, 10); 
    
        return buffer; // Das funzt nicht. ein zeiger auf ein nicht mehr existierendes Feld ist Mist.
    }
    
    string cstr (long zahl)
    {
       stringstream temp;
       temp << zahl;
       return temp.str();
    }
    

    Aber wie gesagt gibt's da schon was in der FAQ drüber und wir haben auch eine Suche auf der Seite.



  • Danke für die Informationen. Danke an alle.

    Die untere Variante funktioniert bei mir nicht. Liegt aber vermutlich daran, dass ich in Dev-C++ entwickle. Vielleicht falsches Unter-Forum erwischt?



  • #include <sstream> und using namespace std? Dann sollte das auch mit Dev gehen.


Anmelden zum Antworten