Char xx[] oder string



  • Hey Freunde,
    seit ner Zeit stelle ich mir die Fragen wann ich ein char array und wann einen string verwnden sollte. Über einer erklärung würde ich mich freuen.

    MFG Sonny98



  • Ein string besteht aus mehreren Zeichenketten/chars.



  • Das kann ein Char array auch?!


  • Mod

    string immer dann wenn mindestens eines der folgenden Kriterien zutrifft:

    • Die Länge der Zeichenkette steht zur Compilezeit nicht fest
    • Kopien einer Zeichenkette (oder von Teilen einer Zeichenkette) sind nötig
    • Zuweisung einer Zeichenkette (oder von Teilen einer Zeichenkette) an eine andere sind nötig
    • Die Zeichenkette ist extrem lang oder man hat viele mittellange Zeichenketten (insgesamt hunderttausende von Zeichen oder mehr und jede Zeichenkette länger als ~8 Buchstaben)
    • Nullzeichen können innerhalb der Zeichenkette vorkommen (was eher ungewöhnlich wäre, aber wer weiß)

    Aufgrund der ersten drei Kriterien, heißt das, dass string so gut wie immer benutzt werden sollte, außer für Zeichenkettenliterale (und da hat man sowieso nicht wirklich eine Wahl).

    Kein Grund für char-Arrays:

    • Man hat irgendwo eine Funktion, die einen const char* erwartet.


  • Mit einem char array könntest du mehrere Chars also eine Art string erstellen



  • Ich denke das ist Sonny98 klar. Er fragt hier, wann man const char* (oder const char[]) und wann man std::string verwenden sollte, nicht wie man diese verwendet.

    Meine Meinung dazu ist eigentlich immer std::string, wenn man C++14 hat auch bei String-Literalen. Und wenn ein char* nötig ist, dann ein std::vector<char>.



  • Meine Meinung dazu ist eigentlich immer std::string, wenn man C++14 hat auch bei String-Literalen.

    erst ab C++14 - das habe ich ja schon Jahre zu früh angefangen std::string zu verwenden

    Und wenn ein char* nötig ist, dann ein std::vector<char>.

    und warum nicht einfach (wenn die small string optimization nicht stört) in beiden Fällen std::string verwenden?



  • Gast3 schrieb:

    Und wenn ein char* nötig ist, dann ein std::vector<char>.

    und warum nicht einfach (wenn die small string optimization nicht stört) in beiden Fällen std::string verwenden?

    string ist nicht wirklich darauf ausgelegt, einen pointer auf das innere auszugeben. Es geht zwar mit &foo[0], aber vector hat hingegen die non-const Version von .data().
    Desweiteren besteht die Gefahr, dass der geschriebene string kuerzer ist, als der gesamte und dadurch Fehler verschleiern kann. Bei std::vector ist es hingegen explizit, dass es lediglich eine char-kette ist und moeglicherweise noch weitere formalia ueberprueft werden muessen.



  • Sonny98 schrieb:

    Hey Freunde,
    seit ner Zeit stelle ich mir die Fragen wann ich ein char array und wann einen string verwnden sollte. Über einer erklärung würde ich mich freuen.

    Ich würde einfach immer string verwenden solange du keinen sehr guten Grund hast etwas anderes zu tun. String ist deutlich komfortabler und weniger Fehleranfällig.



  • Danke an alle für eure erklärungen, doch wie sieht es eigentlich mit dem Speicher aus? Wieviel braucht ein STring wenn er schon soviel speichern kann?



  • Kommt auf die Implementierung an, aber normalerweise so viel wie nötig ist. Das tolle an std::string ist ja, dass er sich selbst vergrößern kann.


Log in to reply