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 algorithmC-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.
-
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.
-
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.