Twitter und Facebook-Anbindung
X
Tweet Follow @twitterapi
!!! Anbindung an twitter und facebook öffnen !!!

Wenn Ihnen mein Online-Buch gefällt,
dann bedanken Sie sich doch mit einer kleinen Spende...

10.1.1 Statische Strings

10.1.1 Statische Strings

Wie Sie das von Arrays kennen, kann man logischerweise auch die Strings statisch erzeugen. Dies hat zur Folge, dass Sie sich nicht um die Speicherreservierung kümmern müssen.

Die statischen Arrays sind am leichtesten zu verwalten und man braucht auch nicht so viele Dinge zu beachten, aber leider werden sie im Stack des Arbeitsspeichers gehalten und somit kann man keine Massen an Informationen halten, wie das z.B. eine Textverarbeitung macht. Nichts desto trotz, werde ich kurz demonstrieren, was man machen kann und Hinweise geben, was Sie unterlassen sollten.

Vorab sei noch erwähnt, dass man einzelne Zeichen in einfache Anführungszeichen setzt, wohingegen ganze Zeichenketten, in doppelte Anführungszeichen gesetzt werden. Man kann auch ein einzelnes Zeichen in doppelte Anführungszeichen setzen, allerdings wird dieses Zeichen dann wie ein String behandelt und somit wird noch das ASCII Zeichen "0" an gehangen, wodurch zwei Byte benutzt werden, um einen Buchstaben zu speichern. Seien Sie sich dessen immer bewusst.

Das Schema sieht so aus: char <Variable>[<AnzahlDerZeichen>] [= "<Zeichenkette>"]

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
					
#include <string.h>

// ...

char astrStatischerString1[80]		= "Mein Inhalt wurde von einer Konstante kopiert.";
printf("%s\n", astrStatischerString1);

astrStatischerString1[45]		= '!';	// Einzelnes Zeichen wird manipuliert
printf("%s\n", astrStatischerString1);

char astrStatischerString2[20];
strcpy_s(astrStatischerString2, 20, "Ich bin statisch.");
printf("%s\n", astrStatischerString2);

astrStatischerString2[16]		= '!';
printf("%s\n\n", astrStatischerString2);

char astrStatischerString3[1001];
printf("Bitte Satz eingeben (max 1000 Zeichen):\n");

gets_s(astrStatischerString3, 1001);
printf("Ihre Eingabe lautet:\n%s\n", astrStatischerString3);
					

Ausgabe:

Mein Inhalt wurde von einer Konstante kopiert.
Mein Inhalt wurde von einer Konstante kopiert!
Ich bin statisch.
Ich bin statisch!

Bitte Satz eingeben (max 1000 Zeichen):
Hallo Welt
Ihre Eingabe lautet:
Hallo Welt
		

Ihnen ist vielleicht aufgefallen, dass meine Arrays alle größer sind, als sie es sein müssten. In Zeile 5 reserviere ich 80 Elemente, obwohl 46 + 1 (Terminator) ausreichen würden. Diese Vorgehensweise ist allerdings üblich, da man zum einen zu faul zum zählen ist und zum Anderen nie weiß, was noch kommen könnte. Wie der Name "statisch" bereits suggeriert, kann man die Größe im Nachhinein nicht mehr ändern. Des Weiteren sehen Sie, wie ich gleich eine Konstante zuweise, oder um ganz korrekt zu sein, dem Compiler in Auftrag gebe, den Inhalt einer konstanten Zeichenkette, in mein Array zu kopieren.

In Zeile 8 und 15 manipuliere ich den Inhalt meines Arrays. Ich mache aus dem Punkt im Satz, ein Ausrufezeichen. Sie lernen also daraus, dass Sie statische Zeichenketten nach Belieben manipulieren können.

In den Zeilen 6, 9, 13, 16, 19 und 22 zeige ich, wie man Strings einfach ausgeben kann, ohne das Array durch iterieren zu müssen. Man benutzt "%s". Achtung! Dies funktioniert nur mit Zeichenketten. Arrays mit Integern z.B. können nicht so ausgegeben werden.

Zeile 12 zeigt, wie Sie mit Stringfunktionen umgehen müssen, wenn Sie statische Arrays benutzen. Entscheidend bei den Funktionen mit "_s" ist, dass man immer noch die Größe des Arrays angeben muss. (Achtung - Nicht die Länge des Wortes, welches ja unter Umständen kürzer sein kann!)

Im dritten Abschnitt, ab Zeile 21 zeige ich, wie man in einen String Werte/Sätze einlesen kann. Hierbei gibt es zwei Besonderheiten. Zum einen braucht man den "&" Operator nicht, da ein Array ja schon ein Zeiger ist und es besser ist die Funktion "gets" bzw. "gets_s" zu benutzen, da "scanf" bzw. "scanf_s" lediglich ein Wort einlesen. Sobald in der Eingabe ein Leerzeichen auftaucht, wird der String abgeschnitten.

Zum Seitenanfang
Zum Inhaltsverzeichnis

© Copyright by Thomas Weiß, 2009 - 2012