Unterschiede zwischen String und Char



  • Hallo zusammen!

    Ich bin noch recht neu bei C++ mit dabei. Im Moment stelle ich mir die Frage, welche Vorteile die Benutzung von Strings gegenüber Char-Arrays bietet.

    Meine bisherigen Überlegungen:

    - Strings kann man einfacher mit einer Zuweisung füllen, für ein Char-Array müsste man sich eine Schleife bauen, oder aber sehr viel Zeit haben (vielleicht gehe ich die Sache auch nur falsch an).

    - Man muss kein genügend großes Array bereitstellen.

    - Nachteilig ist, dass Strings vermutlich mehr Zeit benötigen.

    Wäre über Korrektur und Ergänzung sehr dankbar.



  • Hallo

    Der Vorteil von einer Stringklasse ist, das sie sich selber um die Speicherverwaltung kümmert. Rein funktionell bieten Stringklassen und die Funktionen für C-Strings das gleiche an Basisfunktionen.
    Natürlich wurde in der STL bereits einiges an höheren Möglichkeiten für std::string eingebaut, wie zum Beispiel die Funktionen aus algorithm

    C-Strings sind nur in manchen Fällen ein bißchen schneller als std::string, und können auch etwas langsamer sein. Nämlich dort wo die Gesamtlänge des Strings benötigt wird. Diese muß bei einem C-String erstmal berechnet werden, bei std::string ist sie immer korrekt vorhanden.

    bis bald
    akari



  • Klip schrieb:

    - Strings kann man einfacher mit einer Zuweisung füllen, für ein Char-Array müsste man sich eine Schleife bauen, oder aber sehr viel Zeit haben (vielleicht gehe ich die Sache auch nur falsch an).

    Man kann auch schreiben char wort[] = "hallo welt";
    Dann hat man automatisch ein char array mit 10 Elementen + das Endzeichen NULL;
    Auch ohne Schleife.

    Die Unterschiede weiß ich nicht, aber dafür ja akari.



  • Danke für die Informationen 🙂



  • obbba schrieb:

    Dann hat man automatisch ein char array mit 10 Elementen + das Endzeichen NULL;

    NUL wenn ich bitten darf 😉

    aber ich würd string auch den char arrays vorziehn da es viel komfortabler ist mit ihnen zu arbeiten u.a. wegen den bereits vorhandnen operatoren (ein simples "+" genügt zum anhängen eines strings an den andern oder ein "==" zum test auf gleichheit)



  • Was heißt denn NUL?
    Ist das eine Abkürzung?
    Wenn es darauf hin wiese das alle Bits auf 0 sind, hätte man die Konstante bestimmt ZERO genannt.



  • NUL? Was soll das sein? Du meinst nil?!

    Aber was soll an null falsch sein? 😕



  • weil NULL in c++ vordefiniert ist und theoretisch für alles mögliche stehen könnte. wobei es eigentlich immer als 0 definiert ist.

    für c-strings ist das abschlusszeichen als 0 definiert. nicht NULL.

    unterscheidung für haarspalter.



  • NULL ist nur ein Makro das 0 ist. Wenn man nicht mal einen Standard-Header inkludiert, steht das Makro NULL nicht mal zur Verfügung. Weitehin gibt es in C++ keinen semantischen null.

    Völlig gültiger C++ COde:

    int *i = 0;
    if(i == 0)
     cout << "i zeigt auf null";
    

    Doppeldeutigkeit:

    void foo(int i);
    void foo(int *i);
    
    void bla()
    {
       foo(0);   // ERROR: welches foo soll aufgerufen werden???
    }
    

    Deshalb macht es hier sehr wenig Sinn, mit Belehrungen anzukommen, ob man null, NUL, NIL oder sowas dazu sagt. Es gibt in C++ nur 0.

    Erst mit C++2009 werden wir wohl ein semantischen null-Pointer-Value bekommen, wie man es aus Java oder C# kennt.


  • Mod

    thordk schrieb:

    weil NULL in c++ vordefiniert ist und theoretisch für alles mögliche stehen könnte.

    Nicht alles mögliche. Es ist stets ein Macro, das zu einem konstanten Audruck vom Typ int mit dem Wert 0 expandiert. Und da eine 0 beim Umwandeln in char zu '\0' wird, ist das Ganze tatsächlich Haarspalterei. Es ist nicht schön, hier NULL zu benutzen, falsch ist es nicht.


  • Mod

    Artchi schrieb:

    Doppeldeutigkeit:

    void foo(int i);
    void foo(int *i);
    
    void bla()
    {
       foo(0);   // ERROR: welches foo soll aufgerufen werden???
    }
    

    Was hast du denn für einen Compiler? Das ruft nat. die erste Variante auf.


Anmelden zum Antworten