06.10.2013 Aufrufe

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

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!