char oder string?



  • Generell kannst du auch weiterhin mit char-Array arbeiten. Nur ist mit std::string alles viel einfacher. Nur ein paar Beispiele:

    - die Größe muss vorher nicht bekannt sein. Also keine Vorfestlegungen, Speicherallokierungen und der ganze Kram

    - wie schon vorher gesagt musst du dich nicht mehr darum kümmern, dass dein Array mit einem Nullzeichen endet. Die Nullterminierung macht die String-Klasse für dich

    - Vergleiche kannst du so machen (ist doch eleganter wie strlen(...), oder??? )

    string a="abc";
         string b="def";
         if (a==b)
           cout << "stimmt ja gar nicht" << endl;
    

    - Du kannst die praktischen Methoden der String-Klasse, um z.B. die Länge
    eines Strings zu bestimmen

    int nLength = strTest.length();
    

    sieht doch sehr intuitiv aus

    usw. usw. es gibt mit Sicherheit noch Tausende anderer Vorteile, die die String-Klasse mit sich bringt, so dass es sich auf jeden Fall lohnt, sich ein bisschen damit zu beschäftigen...

    Mfg, smasher1985

    [ Dieser Beitrag wurde am 20.03.2003 um 20:09 Uhr von smasher1985 editiert. ]



  • Original erstellt von smasher1985:
    usw. usw. es gibt mit Sicherheit noch Tausende anderer Vorteile, die die String-Klasse mit sich bringt, so dass es sich auf jeden Fall lohnt, sich ein bisschen damit zu beschäftigen...

    Aber es lohnt sich genauso sich vorher mit char-Arrays zu beschäftigen und nachzuvollziehen was string überhaupt macht bevor man es der einfachheit und sicherheit halber verwendet... 😉



  • Also, MHO: wenn man Strings nur benutzen will, ohne zu wissen, was dahintersteckt, sollte man std::string nehmen, da er (Maskulinum ist doch richtig, oder? 😮 ) IMHO einige Sachen verhindert, die einem schnell passieren.
    So lustige Sachen wie Bufferoverflows mit den bekannten Folgen, oder Strings, die, weil kein '\0' hinten dran hängt, beim ausgeben oder abspeichern mal eben noch nen Teil des Memorys mitausgeben, oder auch umgekehrt, dass man sich selber einige Variablen im Memory überschreibt, das kann echt spassig werden.
    Am schönste finde ich dann die Fälle, in denen man sich die Rücksprungadresse überschreibt, und das Programm an irgendeiner Stelle versucht fortzusetzen, in der wahrscheinlich garnichts ausführbares mehr steht 🙄 .

    Aber wie gesagt, wenn du lernen wilsst, was hinter den Strings steckt, dann nimm ruhig die Null-terminierten Strings.
    Aber dann auch Funktionen wie strncpy und Konsorten, damit du nicht Hackern und deren Exploits Tür und Tor öffnest :p



  • imho proggt keiner der nicht weiss wie nen string aufgebaut is ne anwendung der sich nen hacker widmet 😉



  • Ich meine doch um die Basics zu lernen. Wenn man die nicht lernt steht man irgendwann auf dem schlauch 🙄 . Ist klar, dass man in Programmen die funktionieren sollen lieber std::string nimmt um den code lesbarer und gleichzeitig das programm stabiler zu halten... man braucht sich einfach um weniger kümmern wenn man kein char-array verwendet



  • gerade für anfänger ist es einfacher std::string zu verwenden als char*

    da man mit char* viele frustrierende fehler machen kann - auch können viele anfänger mit zeigern nicht sicher umgehen. folglich denke ich, dass man als anfänger zuerst std::string verwenden sollte und wenn man dann halbwegs sicher ist, dann kann man natürlich schaun was dahinter steckt.



  • Original erstellt von Shade Of Mine:
    folglich denke ich, dass man als anfänger zuerst std::string verwenden sollte und wenn man dann halbwegs sicher ist, dann kann man natürlich schaun was dahinter steckt.

    Oder so wie du sagst geht es auch. Aber es ist fatal wenn man nicht irgendwann die Hintergründe lernt.



  • mit char* kann man aber coole buffer-overflows machen - ein vorteil, IMHO



  • troll : kreativ sehr schwach 🙄



  • Das Thema hatten wir schonmal vor 2-3 Monaten, nach ca 15 Seiten sind wir dann zu dem schluss gekommen das man laut C++ Erschaffern mit string anfangen soll auch wenn die Meinung sonst so etwa 50/50 war.

    Ich find das auch immer etwas verwirrend strings Klassen, dynamische Speicherreservierung überladene Operatoren, Templates und wasweissich noch alles zum Einsteigen zu nehmen aber wenn man sich dessen nicht bewusst ist..
    😃


Anmelden zum Antworten