Unterschied zwischen <cstring> und <string>?
-
Hallo,
ich möchte ein kleines programm schreiben, welches arithmetische ausdrücke auf korrekte klammerung überprüft. da wir das in c++ machen müssen, ich aber bisher nur mit java gearbeitet hab, kenn ich mich mit den bibliotheken nicht so gut aus.
was ist denn der unterschied zwischen den include-dateien <cstring> und <string>???
Ich hab son Taschenbuch "C++ - OOP von Anfang an". Dort wird <cstring> benutzt. Aber ich hab in vielen anderen Tutorials auch <string> gesehen. Worin liegen die Unterschiede? bzw. Gemeinsamkeiten?
lg
-
<cstring>
ist der C++ Header fürstring.h
aus C
<string>
ist der C++ Header fürstd::string
.Eine Übersicht findest du hier:
http://www.cplusplus.com/reference/Grüssli
-
aha...
warum wurden denn C-Bibliotheken in C++-Bibliotheken eingeführt? Wenn die C++-Bibo schon alles, warum noch die aus C verwenden? Und ergeben sich Nachteile, wenn ich cstring benutze, anstatt string? In diesem Buch benutzen sie nämlich immer cstring, was ich komisch finde, denn wenn es schon ein C++ Buch ist, sollten die doch auch alle Bibliotheken aus C++ benutzen und nicht Teilbibliotheken aus C...oder nicht?
-
ausnahme schrieb:
warum wurden denn C-Bibliotheken in C++-Bibliotheken eingeführt?
Weil C89 Code fast bis zu 100% Kompatibel zu C++ ist. Du kannst also C89 Code schreiben und ihn mit einem C++ Kompiler übersetzen. Das Standardkomittee hat sich für diese Kompatibilität entschieden, was Vorteile und Nachteile mit sich brachte.
ausnahme schrieb:
Wenn die C++-Bibo schon alles, warum noch die aus C verwenden?
Die beiden Header unterscheiden sich komplett.
Beim C++ Header hat man eine objektorientierte Lösung, welche auch eine vereinfachte Speicherverwaltung enthält, halt alles über Klassen gelöst ist und RAII gerecht wird.
Beim C Header bekommt man halt die C Lösung, prozedural, eigene Speicherverwaltung. Dafür wohl auch etwas schneller und für einfache Aufgaben vielleicht sogar besser geeignet. Ein Anfänger sollte aber eher auf die C++ Lösung setzen und später dann anfangen zu lernen abzuschätzen, was besser für sein Problem geeignet ist.ausnahme schrieb:
Und ergeben sich Nachteile, wenn ich cstring benutze, anstatt string?
Jein. Die Arbeit mit C-Strings ist einfach deutlich schwerer und unangenehmer. Kann unter Umständen aber trotzdem leichter sein. Stöbere mal ein wenig durch die angegebene Referenz.
ausnahme schrieb:
In diesem Buch benutzen sie nämlich immer cstring, was ich komisch finde, denn wenn es schon ein C++ Buch ist, sollten die doch auch alle Bibliotheken aus C++ benutzen und nicht Teilbibliotheken aus C...oder nicht?
Dann ist es wahrscheinlich ein typisches schlechtes C++ Buch, wovon es sehr viele auf dem Markt gibt. Viele C++ Bücher lernen nämlich mehr ein C mit Klassen, was C++ aber überhaupt nicht ist. Meistens haben die Autoren zuerst C gelernt und sind später mehr schlecht als recht auf C++ umgestiegen.
Im Forum werden meistens die folgenden zwei Bücher für C++ Anfänger empfohlen:
- C++ Primer
- Thinking in C++ 1&2 (Auch gratis als PDF erhältlich, aber nur Englisch)Grüssli
-
ausnahme schrieb:
aha...
warum wurden denn C-Bibliotheken in C++-Bibliotheken eingeführt? Wenn die C++-Bibo schon alles, warum noch die aus C verwenden? Und ergeben sich Nachteile, wenn ich cstring benutze, anstatt string? In diesem Buch benutzen sie nämlich immer cstring, was ich komisch finde, denn wenn es schon ein C++ Buch ist, sollten die doch auch alle Bibliotheken aus C++ benutzen und nicht Teilbibliotheken aus C...oder nicht?Mit string.h/cstring bekommst du Funktionen, um C-Strings, also char-Arrays zu verarbeiten (sowas wie strcpy, strstr usw.). Das hat nichts mit der Klasse std::string zu tun, die völlig anders funktioniert und mehr den String-Typen aus anderen Sprachen ähnelt. (Mindestens) aus Kompatibilitätsgründen wurde daher der Header für C-Strings beibehalten. Es ist also nicht doppelt gemoppelt, wie du wohl vermutet hast.
-
<cstring>
ist C-Funktionen, eher low-level. Benutzt man als C++-Coder sehr selten. Ist aber aus Kompatibilität zu C vorhanden.<string>
hat eine String-Klasse, also das was du von Java eher gewohnt bist. Ist auch viel komfortabler, und sollte man auch nutzen.
-
Hallo, Dravere.
Vielen Dank für die sehr ausführliche Antwort! Ich hab auch schon die Schwierigkeiten festgestellt. Ich wollt ne printf-Anweisung machen, hab dann cstdio inkludiert und dann aber für den Platzhalter %s in der printf einen String benutzt, den ich durch die C++-string-Klasse erstellt hatte. Aber C kennt ja solche Strings nicht, hab deshalb ne fette Fehlermeldung bekommen (Just-In-Runtime Debugging nochwas). Musste dann den String in das C-übliche String umwandeln. Puh...Ich find es scheiße, dass die in meinem Buch nicht darauf eingehen. Der Verlag meines Buches hat eins für C veröffentlicht, und in vielen Foren wurde es empfohlen. Da dachte ich...wenn die so gut sind, dann ist die C++-Variante bestimmt auch gut... Aber Danke nochmal für die Aufklärung. Ich werde jetzt vorsichtiger sein und ein bisschen in der C++Reference stöbern.
THX!
-
Ich hab son Taschenbuch "C++ - OOP von Anfang an". Dort wird <cstring> benutzt.
Ich finde der Buchtitel steht irgendwie in Konflikt mit diesem Header.
Ich hab auch schon die Schwierigkeiten festgestellt. Ich wollt ne printf-Anweisung machen, hab dann cstdio inkludiert und dann aber für den Platzhalter %s in der printf einen String benutzt, den ich durch die C++-string-Klasse erstellt hatte. Aber C kennt ja solche Strings nicht, hab deshalb ne fette Fehlermeldung bekommen (Just-In-Runtime Debugging nochwas). Musste dann den String in das C-übliche String umwandeln.
Wieso nicht die C++ Ausgabe anstelle der C Ausgabe verwenden? cout kommt wunderbar mit der stringklasse zurecht.
Solltest du dennoch C Bibliotheken verwenden wollen kannst du trotzdem mit der Stringklasse arbeiten, du kannst nämlich mit dem Aufruf der Methode c_str() des strings an den zugrunde liegenden char const* kommen
-
JustAnotherNoob schrieb:
Ich hab son Taschenbuch "C++ - OOP von Anfang an". Dort wird <cstring> benutzt.
Ich finde der Buchtitel steht irgendwie in Konflikt mit diesem Header.
Sogar sehr irgendwie. Ich frage mich wie sie das im Buch erklären. Auf der ersten Seite vielleicht so?
"Aber bevor wir mit OOP anfangen, lernen wir zuerst prozedurale C Programmierung."Hey, im ersten Satz steht OOP, also von Anfang an!
Grüssli