Eine Einführung in die Programmiersprache C und ... - C /C++ Ecke
Eine Einführung in die Programmiersprache C und ... - C /C++ Ecke
Eine Einführung in die Programmiersprache C und ... - C /C++ Ecke
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
<strong>E<strong>in</strong>e</strong> <strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>die</strong> Informatik <strong>und</strong> <strong>die</strong> <strong>Programmiersprache</strong> C<br />
12 Str<strong>in</strong>gs<br />
12.1 Gr<strong>und</strong>sätzliches<br />
Str<strong>in</strong>gs oder Zeichenketten werden <strong>in</strong> C nicht direkt unterstützt. Zur Verarbeitung von Str<strong>in</strong>gs müssen<br />
Bibliotheksfunktionen aus der Standardlibrary (str<strong>in</strong>g.h) oder selbstgeschriebener Code herangezogen<br />
werden.<br />
Zeichenketten werden <strong>in</strong> C als Buchstabenfelder (char-Arrays) repräsentiert. Das Ende e<strong>in</strong>er Zeichenkette<br />
wird durch den ASCII-Wert 0 ('\0') kenntlich gemacht.<br />
Die e<strong>in</strong>zige direkte Unterstützung für Str<strong>in</strong>gs <strong>in</strong> C s<strong>in</strong>d <strong>die</strong> Str<strong>in</strong>gliterale (Beispiel: "Hans") sowie<br />
<strong>die</strong> Array<strong>in</strong>itialisierung mit Str<strong>in</strong>gs:<br />
char Text[] = "Mueller";<br />
Bei Str<strong>in</strong>gliteralen <strong>und</strong> Array<strong>in</strong>itialisierungen wird automatisch das Endekennzeichen '\0' am Ende<br />
der Zeichenkette angehängt. Die Variable Text würde im Speicher also so aussehen:<br />
'M' 'u' 'e' 'l' 'l' 'e' 'r' '\0'<br />
Und somit 8 Byte Speicherplatz belegen.<br />
Str<strong>in</strong>gliterale s<strong>in</strong>d konstante Arrays, deren Inhalt zwar verändert werden kann, aber nicht verändert<br />
werden sollte. Wenn man den Inhalt von Zeichenkonstanten ändert, entstehen unportable Programme.<br />
Alle Bibliotheksfunktionen, <strong>die</strong> mit Str<strong>in</strong>gs arbeiten, verlangen als Argumente <strong>die</strong> Anfangsadresse(n)<br />
(Zeiger, Arraynamen) der betroffenen Str<strong>in</strong>gs.<br />
Der Typ char * welcher oft für Str<strong>in</strong>gs benutzt wird, ist eigentlich e<strong>in</strong> Zeiger auf e<strong>in</strong>en Buchstaben,<br />
er enthält also nur <strong>die</strong> Adresse (Den Platz im Speicher) an welcher des erste Zeichen des<br />
Str<strong>in</strong>gs steht. Deshalb ist auch das Zeichen '\0' am Ende erforderlich, weil <strong>die</strong> Funktionen sonst das<br />
Ende des Textes nicht erkennen könnten.<br />
12.2 E<strong>in</strong>-/Ausgabe von Str<strong>in</strong>gs:<br />
Mit den Funktionen gets() <strong>und</strong> puts() können ganze Zeilen e<strong>in</strong>gelesen <strong>und</strong> ausgegeben werden.<br />
Mit scanf("%s", a) können nur e<strong>in</strong>zelne Worte (Durch Whitespaces getrennte Zeichenfolgen)<br />
e<strong>in</strong>gelesen werden.<br />
char Name[] = "Mueller";<br />
scanf("%s", Name); /* Achtung scanf liest nur bis zum ersten whitespace */<br />
/* (leerzeichen, Tabulator, Zeilenwechsel) */<br />
/* Achtung, hier kommt als grosse Ausnahme ke<strong>in</strong> & vor */<br />
/* Name, da der Arrayname selbst schon auf <strong>die</strong> Adresse*/<br />
/* des ersten Elementes verweist */<br />
pr<strong>in</strong>tf("Der Name ist %s\n", Name);<br />
/* ganze Zeile e<strong>in</strong>lesen */<br />
gets(Name);<br />
/* ganze Zeile ausgeben */<br />
puts(Name);<br />
Gedruckt am 11.09.2008 13:04:00 Letzte Änderung am: 11. September 2008 Version 2.4, I. Oesch 48/147