char oder string?



  • Hi,

    also viele denken bestimmt die Frage ist jetzt total bekloppt, aber es intressiert mich einfach.

    WARUM sollte man nach möglichkeit std::string benutzen anstatt char? Sollte man in C++, char wenn es geht überhaupt nicht mehr benutzen? Wenn ja wieso, wenn nein Wieso?



  • string ist nen 0 terminierter array von chars wenn ich mich nicht irre ... 🙄

    ich glaub das problem liegt nicht an char oder string sondern am programmieren selbst du kannst dir natürlich auch nen array of chars machen und alles mit \0 beenden ...

    Bei strings wird das halt automatisch .. gemacht . !

    Bsp.: char[80] sollte heissen da passen nur 80 zeichen rein .. defakto könnte man aber auch 100 reinschreiben weil nirgends wo nen zeichen ist wo sagt he da passen nur 80 zeichen rein .. beim string ist die \0 terminierung drin !

    [ Dieser Beitrag wurde am 20.03.2003 um 16:52 Uhr von 1ntrud0r editiert. ]



  • das bedeutet für mich selber? 😕



  • siehe oben ! 🙄



  • 1ntrud0r: volltrottel 😉



  • Original erstellt von 1ntrud0r:
    string ist nen 0 terminierter array von chars wenn ich mich nicht irre

    std::string kannn Nullzeichen enthalten. Es ist zwar nicht leicht, sie da rein zu bekommen, aber gehen muss es.



  • Original erstellt von <Full Throttle>:
    1ntrud0r: volltrottel 😉

    keine trollerei ...

    hier steht auch noch nen bissl was @ Ikari http://www.msoe.edu/eecs/cese/resources/stl/string.htm

    [ Dieser Beitrag wurde am 20.03.2003 um 17:01 Uhr von 1ntrud0r editiert. ]



  • 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