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());
-
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.
-
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.
-
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.
-
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