Für was brauch ich die String Header?
-
Für was braucht man eigentlich das ganze string Zeug wie <cstring>.....? Es funktioniert doch auch ohne? Ähm und was ich auch noch nicht so ganz gecheckt habe was ist jetzt genau der Unterschied zwischen: <string.h>; <cstring>; <string>; ??
Dankeschön schon mal im Voraus.#include <iostream> //#include <string> using namespace std; int main() { char Text[50]; char Text1[50]="Johann Wolfgang von Goethe"; string Text2="Hans Werner Olm"; cout << "Text1 laenge: " << strlen(Text1) << "-Buchstaben" << endl; strcpy(Text,Text1); cout << Text << endl; return 0; }
-
Hallo zusammen,
die Header mit der Extension *.h sind Headerdateien die C-Funktionalität bereitstellen. Die Headerdateien ohne diese Extension sind für die Programmierung in C++.
Da in den Quellen der C-Standardbibliothek einige "unschöne" Makros definiert sind, wurden die Headerdateien der Form c* eingeführt, welche die Funktion der C-Bibliothek bereitstellen aber anders implementiert sind.
Wenn du Programme in C++ schreibst, solltest du die Möglichkeiten der STL nutzen; kommst du nicht um die C-Funktionen vorbei, so verwende die Header der Form c* anstatt der Header mit der Erweiterung *.h
Grüße Martin
-
Stromberg schrieb:
Für was braucht man eigentlich das ganze string Zeug wie <cstring>.....? Es funktioniert doch auch ohne?
Na, so Dinger wie 'isupper' oder 'toupper' gibt es sonst nicht direkt.
Ähm und was ich auch noch nicht so ganz gecheckt habe was ist jetzt genau der Unterschied zwischen: <string.h>; <cstring>; <string>; ??
<string.h>: Veraltet. Existiert in C++ nicht mehr und ist abgelöst durch:
<cstring>: Enthält Funktionen für die Manipulation von C-Strings.
<string>: C++-Stringklasse.Dein Code sollte so nicht funktionieren: Die Funktionen 'strcpy' und 'strlen' setzen an sich das Einfügen von <cstring> voraus und die Klasse 'string' ist in <string> deklariert.
'return 0' am Ende der 'main'-Funktion ist auch überflüssig (aber nur da!).
-
Darum frag ich ja, weil dieser Code hier funktioniert bei mir ohne irgend eine string header.
#include <iostream> //#include <string> using namespace std; int main() { char Text[50]; char Text1[50]="Johann Wolfgang von Goethe"; string Text2="Hans Werner Olm"; cout << "Text1 laenge: " << strlen(Text1) << "-Buchstaben" << endl; strcpy(Text,Text1); cout << Text << endl; return 0; }
Compiler is MinGW.
-
weil iostream wahrscheinlich string includiert
-
Naja, es kann sein das <iostream> selbst schon <cstring> inkludiert, und somit du indirekt die C-Funktionen wie strcpy benutzen kannst. Ist aber eigentlich nicht sauber von dir, weil wenn du was aus cstring benutzt, solltest du es auch inkludieren. Denn wenn <iostream> mal nicht <cstring> inkludiert (was ja passieren kann, z.B. unter einer anderen Compiler-Umgebung!), wird sich der jenige, der deinen Code kompilieren darf, ganz schön über Errors wundern. Vielleicht auch du selbst, wenn du jahre später mal dein Projekt mal wieder kompilieren willst.
Indirektes inkludieren ist nur da sauber, wenn es der Header explizit besagt. Z.B. gibt es große Libraries, die viele Headers haben, aber dann zur Einfachheit einen gemeinsamen Header anbieten. Aber das ist dann auch offiziell in der Dokumentation der Library vermerkt.