char und wchar_t VS. String
-
Hallo liebe Gemeinde.
Ich weiß, dass ich langsam nerve, was Strings angeht, aber ich habe es immer noch nicht überrissen.
Ich habe einmal in den Büchern "C++: Objektorientiertes Programmieren von Anfang an" und "C: Programmieren von Anfang an" von Helmut Erlenkötter und "Der C++ Programmierer" unter Strings nachgeschlagen.
In "C++: Objektorientiertes Programmieren von Anfang an" heißt es wie folgt:
"3.1.5. Felder und Zeichenketten
Der Grund, warum in diesem Kapitel Felder und Zeichenkette gemeinsam behandelt werden, ist die Tatsache, dass C++ keinen eigenen Datentyp für Zeichenketten besitzt, sonder statt dessen Felder vom Typ char bzw. wchar_t benutzt."
Jedoch funktioniert folgender Code:
#include <iostream> #include <string> using namespace std; int main() { std::string Text; cout << "Geben Sie eine Zeichenfolge ein!" << endl; getline(cin, Text) cout << endl; cout << "Das haben Sie eingegeben: " << endl; cout << Text << endl; cout << endl; return 0; }
Gibt es nun in der C++ Programmierung nun den Datentyp String oder muss ich den Umweg über char und wchar_t machen?? Was sagen denn die Profis unter euch??
Danke für die Antworten im Voraus.
Gruß
Max
-
Schmeiß das Buch weg.
P.S.: Willst du uns eigentlich verarschen?
"C: Programmieren von Anfang an"
C ist nicht C++. Da kannst du ebensogut versuchen mit einem Javabuch C++ zu lernen.
-
std::string ist ein user-defined type und kein Basisdatentyp. Das ist alles was damit gemeint ist.
-
Trotzdem benutzt man keine char-Felder.
-
SeppJ schrieb:
Schmeiß das Buch weg.
P.S.: Willst du uns eigentlich verarschen?
Punkt 1: Das Buch "C++: Objektorientiertes Programmieren von Anfang an" ist bei den Buchempfehlungen dabei.
Punkt 2: Ich will euch NICHT verarschen. Wie kommst Du darauf, dass ich euch verarschen möchte?
Punkt 3: Das beantwortet nicht meine Frage. Gibt es in der C++ Programmierung nun den Datentyp String oder nicht??
Gruß
Max
-
Das "verarschen" bezieht sich darauf, dass du hier mit einem C-Buch ankommst.
-
Ich habe es mir eben gekauft, da ich dachte, dass alles, was man in C nutzen kann, auch in C++ nutzen kann. Außerdem haben mich die 12 Euro nicht umgebracht.
Z. B. die Funktion gets kann man sowohl in C als auch in C++ nutzen, habe ich schon ausprobiert.
Sorry, falls es so angekommen ist, als dass ich euch verarschen wollte. So hätte es WIRLICH NICHT rüberkommen.
Gruß
P.S.:
@ SeppJ ... hast Du eigentlich jetzt meine Entschuldigung angenommen oder nicht?
-
gets sollte man weder in C noch in C++ benutzen.
-
silent_max schrieb:
Sorry, falls es so angekommen ist, als dass ich euch verarschen wollte. So hätte es WIRLICH NICHT rüberkommen.
Es kommt so rüber weil du seit Monaten die gleichen, totalen Anfängerfragen stellst, deren Antworten alle mehr als offensichtlich sein sollten. Und dass man gets in C++ benutzen kann, heißt noch lange nicht, dass man das auch sollte. (Und wie SeppJ schon richtig angemerkt hat, failt die Funktion auch in C in voller Bandbreite. ;))
-
silent_max schrieb:
In "C++: Objektorientiertes Programmieren von Anfang an" heißt es wie folgt:
"3.1.5. Felder und Zeichenketten
Der Grund, warum in diesem Kapitel Felder und Zeichenkette gemeinsam behandelt werden, ist die Tatsache, dass C++ keinen eigenen Datentyp für Zeichenketten besitzt, sonder statt dessen Felder vom Typ char bzw. wchar_t benutzt."
Hallo Max,
das ist schlicht falsch! C++ kennt den Datentyp std::string für Zeichenketten.
-
Werner_logoff schrieb:
Hallo Max,
das ist schlicht falsch! C++ kennt den Datentyp std::string für Zeichenketten.
@Werner_logoff
Achso... Danke für die einfache und konkrete Antwort.Soll ich mich jetzt dafür entschuldigen, dass ich sowohl in C als auch in C++ kein Überflieger bin?? Leider habe ich bisher die falsche Literatur benutzt...
Warum sollte man weder in C noch in C++ die Funktion gets() benutzen??
-
silent_max schrieb:
Soll ich mich jetzt dafür entschuldigen, dass ich sowohl in C als auch in C++ kein Überflieger bin??
Ja. Die Antwort auf deine Frage hättest du auf jeder Referenz finden können.
Gehört der Typ string zum Standard? http://en.cppreference.com/w/cpp aufrufen, nach string suchen, fertig.
-
silent_max schrieb:
Warum sollte man weder in C noch in C++ die Funktion gets() benutzen??
Man kann keine maximale Anzahl der zu lesenden Zeichen definieren, dadurch muss das Ziel-Array unnötig groß gemacht werden damit selbst Monster-Eingaben nicht zu buffer-overflows führen können.
Insgesamt also verdammt Unsicher.
-
cooky451 schrieb:
Ja. Die Antwort auf deine Frage hättest du auf jeder Referenz finden können.
Gehört der Typ string zum Standard? http://en.cppreference.com/w/cpp aufrufen, nach string suchen, fertig.Dann entschuldide ich mich bei Dir cooky451, dass ich kein Überflieger bin.
Ich werde dann absofort mehr dahinter klemmen, Internetseiten wie http://www.cplusplus.com/ zu verwenden.
Mit insgesamt 4 Büchern, einer guten Internetseite und einem Forum bin ich, so hoffe ich, gut bedient.
Ich hoffe zudem, dass es hier im Forum Menschen gibt, die bereit sind, Hilfe zur Selbsthilfe geben.
Gruß
-
Sone schrieb:
silent_max schrieb:
Warum sollte man weder in C noch in C++ die Funktion gets() benutzen??
Man kann keine maximale Anzahl der zu lesenden Zeichen definieren, dadurch muss das Ziel-Array unnötig groß gemacht werden damit selbst Monster-Eingaben nicht zu buffer-overflows führen können.
und selbst dann können overflows entstehen...