Ist es in C++ sinnvoller ein Char Array oder ein String für z.B. Wörter zu benutzen?
Guten Tag, Ich versuche mir seit einiger Zeit selber C++ mit einem Buch beizubringen und bin auch schon recht weit. Das Buch wurde im Jahr 2000 herrausgebracht und benutzt keine Strings für Zeichenketten sondern Char Arrays... Bis vor 5 Minuten ging ich auch davon aus, dass es keine Strings in C++ gibt und man sich deshalb für diese Lösung entschieden hat. Heute sah ich dann in einem Video, wie jemand Strings über eine Standardlibary eingebunden hat und Strings benutzen konnte. Das bringt mich zu der Frage: Welche der beiden Typen soll ich benutzen und gibt es für Strings auch Funktionen wie: strcpy, strlen und strcat ?
6 Antworten
- Bei einem Buch aus dem Jahr 2000 handelt es sich wohl um C++98. Inzwischen gab es C++03, C++05, C++11, C++14 und bald kommt C++17 raus. Ich würde behaupten, dass in den letzten beiden Versionen (also seit C++11) so unglaublich viele Neuerungen eingeflossen sind, dass es sich - verglichen mit C++98 - um eine völlig neue Programmiersprache handelt! So wie damals programmiert man heute nicht mehr in C++, sei dir dessen bitte bewusst.
- Da du ja schon Erfahrung mit einer - zugegeben etwas veralteten - Version von C++ zu tun hattest, solltest du wirklich in Erwägung ziehen, dir das Buch "Die C++ Programmiersprache" von "Bjarne Stroustrupp" zu kaufen, und zwar in der aktuellen (!!!) Version. Dieses Buch richtet sich laut Autor nicht an absolute Anfänger, aber nach dem was du schreibst, wirst du sicher sehr gut damit klar kommen! Das kannst du locker von Vorne bis Hinten durcharbeiten (auch wenn es ein ganz schöner Wälzer ist), und da du ja kein totaler Anfänger mehr bist, wirst du damit sehr entspannt lernen können.
- C++ bietet zwar die C Standardbibliothek in den <cXYZ> Headern an, aber viele Funktionen wurden durch eine bessere Implementierung in anderen Headern ersetzt. So benutzt man heute anstelle von "strlen()" lieber "std::char_traits<char>::length()" oder statt "strcmp()" lieber "std::char_traits<char>::compare()". (Die Vorteile dieser längeren Versionen werden sich einem Anfänger vermutlich nicht auf Anhieb erschließen, aber als Fortgeschrittener wirst du froh sein, dass es sie gibt.)
- Beachte besonders Punkt 1 dieser Liste! C++98 und C++11 (oder neuer) sind von den Konzepten her schon SEHR unterschiedlich. Mit dem Buch von "Bjarne Stroustrupp" wirst du das alles aber a) locker meistern und b) verdammt viel Freude haben!
PS: Die char_traits gab es genau genommen auch schon zu C++98 Zeiten, aber irgendwie wurden die damals noch viel stiefmütterlicher behandelt als heute. ><
Hallo,
Char Arrays sind Relikte aus der C Zeit, heutzutage solltest Du, es sei denn, Du benutzt irgendwas spezielles, strings verwenden.
Mehr dazu, auch Nachteile des Char Arrays findest Du hier:
Du solltest wann immer möglich auf std::string zurück greifen.
Ist es in C++ sinnvoller ein Char Array oder ein String für z.B. Wörter zu benutzen?
Ist es nicht „sinnvoller“ Java statt C++ zu nutzen?
Was ist überhaupt sinnvoll?
Stroustrup fand zunächst Char Arrays in C++ für sinnvoller. Irgendwann begannen Normenausschüsse sich wie bei C um C++ zu kümmern und sagten dann, wir würden lieber Strings statt Char Arrays verwenden. Das ist ja nun eher Geschmackssache denn eine Frage der Sinnhaftigkeit.
Wichtig ist doch nur, dass die Programme bzw. die Software richtige Ergebnisse liefert. Und die hängen nicht davon ab, ob man Strings oder Char Arrays nutzt.
Da du mit Arrays sehr einfach Memory-Leaks und damit nicht nur Programmfehler sondern auch potentielle Sicherheitslücken riskierst solltest du definitiv wann immer möglich std::string und deren Methoden verwenden.
Mit Methoden meine ich z.B. string.at(i) statt string[i] da du sonst wieder Memory-Leaks verursachen könntest.
std::strings sind immer noch ganz normale char-arrays. Der Riesen Vorteil kommt jedoch durch die Methoden, welche dir das Error-handling und damit potentielle Gefahren abnehmen.
Liebe Grüße, JutenMorgen!