Strings in C = arrays vom typ char?
-
Hallo alle zusammen,
erstmal muss ich ehrlich sagen, dass es hier im Forum echt spitze ist:)
Eure Antworten helfen mir echt weiter, also vielen Dank.
Nun zu meiner Frage:Soweit ich mich bisher in C eingelesen habe, habe ich den Eindruck, dass es keinen Datentyp "String" gibt, so wie bei Java zum Beispiel.
Strings sind lediglich Arrays vom typ char. Ist das so korrekt?
Nun habe ich aber auch gelesen, dass man nicht unbedingt einen array anlegen muss, um einen "String" zu erzeugen. Das verwirrt mich nun aber etwas, da doch nach definition ein String nichts weiter zu sein scheint, als ein array???Kann mir mal jemand diese Widersprüchlichkeiten aufklären?
Ich blicke da irgendwie nicht so richtig durch.Grüsse
-
Ja, in C gibt es keinen echten String-Datentyp, sondern nur die Konvention, ein null-terminiertes Zeichenarray als String aufzufassen. Um die Schreibung etwas zu vereinfachen, kann man im Programm aber String-Literale angeben, die dann intern auch wieder als Zeichenarrays dargestellt werden.
(und häufig hantierst du dann nur noch mit Zeigern auf diese Literale)const char* ptr = "Hallo";
wird vom Compiler etwa so umgesetzt:
//global const char[6] litHallo = { 'H', 'a', 'l', 'l', 'o', '\0' }; ... const char* ptr = &litHallo[0];
-
Hallo, vielen Dank für deine Antwort.
Ich habe das glaube ich jetzt verstanden. Aber was meinst du genau mit:
"(und häufig hantierst du dann nur noch mit Zeigern auf diese Literale)"heisst das, dass ein Pointer auf das Literal (oder den Array) ausreicht, um den String zu verwenden?
Kannst du mir ein Bsp nennen?
-
Ja, in vielen Fällen reicht der Zeiger aus (in C kommt es öfter vor, daß du kein Array in der Hand hältst, sondern nur einen Zeiger auf dessen erstes Element). Du mußt nur darauf achten, daß du über diesen Zeiger die darunterliegenden Daten nicht ändern darfst - sowas geht nur, wenn du selber den Speicher angefordert hast.
Derconst char* ptr
dort oben ist zum Beispiel so ein Zeiger auf das Literal "Hallo". Ansonsten kommt es häufig vor, daß du im Quelltext String-Literale direkt einsetzt (z.B. als Formatierungsangaben bei printf() und scanf() oder als Dateimodus für fopen()).
-
Ein Array ist ein Verweis auf den Beginn/die Adresse eines Speicherbereiches.
Ein Zeiger ist ein Verweis auf einen Speicherbereich, dessen Inhalt als Verweis auf einen weiteren Speicherbereich interpretiert werden kann.
Sei dir im Klaren, dass Zeiger/Arrays eine der wichtigsten Grundlagen der C Programmierung sind, manche Leute begreifen das nie.
D.h. Zeiger und Array sind NICHT das Gleiche und schon gar nicht dasselbe.