char Array ohne feste Größe wie?



  • Hallo Leute,
    also ich bin gerade dabei ich grafisches Chat Programm zu erstellen.
    So das Problem ist, dass ich ein char Array habe an das immer wieder Text angehängt wird. Aber das Array hat eine feste Größe als ist es irgendwann voll und das Programm stürzt ab.

    So jetzt ist meine Frage wie bekomme ich es dass ich ein Array habe wo immer wieder Text hinzugefügt werden kann ohne am Anfang festzulegen wie viel max in das Array passt.

    so habe ich es bis jetzt

    char TEMP[999];
    char neuertext[999]; //ändert sich immer je nachdem was der Nutzer eingibt
    while(neuer_text = true)
    {
        strcat(TEMP, neuertext); // neuen text anhängen
    }
    

    so wie ein C++ string der ist ja auch unendlich groß



  • Du kennst std::string und benutzt es nicht? Warum?
    Die Bedingung in deiner while-Schleife macht nicht, was du glaubst.



  • Das Problem ist eigentlich alle Funktionen brauchen char.
    also musste ich das jedas mal in char convertieren und zurück.

    Wenn du mir sagst wie das geht probier ich es mal 😃



  • MaxundTutorials schrieb:

    Wenn du mir sagst wie das geht probier ich es mal 😃

    funktion(neuer_text.c_str());


  • Mod

    Bzw. seit C++11

    funktion(neuer_text.data());
    

    Das ist allgemeiner.



  • Arcoth schrieb:

    Das ist allgemeiner.

    Was soll denn "allgemeiner" heissen?

    Du verzichtest vor C++11 auf die Garantie, dass der String nullterminiert ist.


  • Mod

    Nexus schrieb:

    Du verzichtest vor C++11 auf die Garantie, dass der String nullterminiert ist.

    ... deswegen habe ich ja geschrieben, "seit C++11" (falls du dich auf den zweiten Edit beziehst).

    Was soll denn "allgemeiner" heissen?

    Allgemeiner heißt allgemeiner. Es funktioniert bspw. auch für vector<char> .



  • Arcoth schrieb:

    Allgemeiner heißt allgemeiner. Es funktioniert bspw. auch für vector<char> .

    Wird emorm Spaß machen, ganz einfach nach vector<char> umzustellen und mangels Nullterminierung alles umzuschreiben.
    Nö, hier bleibe ich bei c_str, weil ich das meine.


  • Mod

    und mangels Nullterminierung alles umzuschreiben.

    Oh... 😃



  • Arcoth schrieb:

    Bzw. seit C++11

    funktion(neuer_text.data());
    

    Das ist allgemeiner.

    funktion(&*begin(neuer_text)) ist noch allgemeiner.


  • Mod

    TyRoXx schrieb:

    Arcoth schrieb:

    Bzw. seit C++11

    funktion(neuer_text.data());
    

    Das ist allgemeiner.

    funktion(&*begin(neuer_text)) ist noch allgemeiner.

    Aber auf die Art und Weise, die dich in Probleme bringt. Die data-Methode wird nämlich nur von Containern angeboten, bei denen dies Sinn macht (vector, string, array), wohingegen dieser Vorschlag hier bei allem funktioniert. Das heißt, auch bei nicht-kontinuierlichen Datenstrukturen - ohne jede Warnung.



  • Ich denke, TyRoXx wollte damit vor allem aufzeigen, dass "allgemeiner" hier ein schlechtes Argument ist 😉



  • Jo Leute,
    auf jeden Fall vielen dank mache es jetzt alles mit strings und wandel sie dann mit .c_str() und .str() so um wie ich sie brauche 🙂


Log in to reply