c++ std::string zu char[] Problem?



  • Och möchte über colocodes farbige nachrichten verschichen können, das ist der code

    #include <iostream>
    #include <windows.h>
    #include <string>
    
    HANDLE han = GetStdHandle(STD_OUTPUT_HANDLE);
    
    using namespace std;
    
    void sayconsole(std::string message)//das problem ist ich schaffe es nicht den      
                                        //string "message" in text rein zu schtecken
    {
        char text[100];
        strncpy(text, message.c_str(), sizeof(message));
        unsigned color;
    
        for(int i = 0;i < sizeof(text)/sizeof(char); i++)
        {
            if(text[i] == '&') //wen ein colorcode gefunden würde
            {
                char buffer[] = { text[i+1], 0 }; // null-terminierten Hex-String basteln
                color = strtol(buffer, 0, 16); // strtol aufrufen um den Hex-Wert in diesem String zu parsen
    
                SetConsoleTextAttribute(han, color);
                i++;
            }else
            {
                std::cout  << text[i];
            }
        }
        SetConsoleTextAttribute(han, 0x0f);
        std::cout << std::endl;
    }
    
    int main()
    {
        std::string msg;
        sayconsole("Hallooo&bBlau");
        system("PAUSE");
    
        return 0;
    
    }
    

    Ich ich es kompiliere zeigt die console nur irgendwelche buchtaben die ich noch nie gesehen hab. Hat jemand eine lösung ?
    SRy wegen der rechtschreibung 🙄



  • Welchen Sinn hat text? Du kannst gleich message nehmen.
    sizeof(message) ergibt nicht die Länge des String.
    Die Schleife läuft immer über das komplette Array, auch wenn nur ein Zeichen enthalten ist.


  • Mod

    strncpy wird nicht sicher verwendet (und ist prinzipiell überflüssig, wie bereits erwähnt), da im Fall zu langer Eingaben keine Nullterminierung erfolgt.



  • wie wäre es mit einer Klasse ColoredString, die einfach von String erbt und zusätzlich ein farbatrribut enthält und den <<-operator überlädt?

    ansonsten gibt es noch die String-methode c_str().



  • HansKlaus schrieb:

    wie wäre es mit einer Klasse ColoredString, die einfach von String erbt und zusätzlich ein farbatrribut enthält und den <<-operator überlädt?

    ansonsten gibt es noch die String-methode c_str().

    Von std::string erben ist sehr böse, die Klasse ist darauf nicht ausgelegt. Alle Methoden und vor allem der Destruktor sind nicht virtual.



  • hmmm und wie wäre es damit, den String in die Klasse ColoredString einzukapseln und über entsprechende Methoden die Methoden von String aufzurufen? das müsste doch gehen, oder?


Log in to reply