Strings deklarieren und initialisieren

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

Nach oben zu Mit Strings arbeiten

Ein String muss bei der Deklaration nicht initialisiert werden:

 : string;

Strings werden automatisch mit einem Leerwert initialisiert. Mit der Variablen EmptyStr können Sie ermitteln, ob ein String einen Leerwert enthält:

S = EmptyStr;

Sie können die Prüfung auch mithilfe eines leeren Strings vornehmen:

S = '';

Ein leerer String enthält keine gültigen Daten. Aus diesem Grund entspricht die Indizierung eines leeren Strings einem Zugriff auf nil : Das Ergebnis ist eine Zugriffsverletzung.

 var
   S: string;
 begin
   S[i];    // Löst eine Zugriffsverletzung aus
   // Anweisungen
 end;

Wenn Sie einen leeren String in einen PChar umwandeln, ist das Ergebnis ein nil-Zeiger. Einen solchen PChar dürfen Sie nur an Routinen übergeben, die zur Verarbeitung von nil-Werten eingerichtet wurden:

 var
   S: string;   // Leerer String
 begin
   proc(PChar(S));  // Prozedur muss nil-Werte verarbeiten können
   // Anweisungen
 end;

Kann die Prozedur keine nil-Werte verarbeiten, müssen Sie den String initialisieren:

   S := 'Nicht mehr nil';
   proc(PChar(S)); // Prozedur muss keine nil-Werte verarbeiten können

Alternativ können Sie die Länge des Strings mit der Prozedur SetLength einstellen:

   SetLength(S, 100); // Weist S die dynamische Länge von 100 Zeichen zu
   proc(PChar(S)); // Prozedur muss keine nil-Werte verarbeiten können

Wenn Sie SetLength verwenden, bleiben die Zeichen im String erhalten. Der Inhalt des neu zugewiesenen Speichers ist allerdings nicht definiert. Nach einem Aufruf von SetLength, S ist sichergestellt, dass S auf einen eindeutigen String verweist, dessen Referenzzähler den Wert Eins enthält.

String-Literale sind per Vorgabe Unicode. Um einen String für ANSI-Zeichen zu initialisieren, wandeln Sie den Typ des Literals um:

 AnsiString S;
 S := AnsiString('Unicode string');

Die Länge des Strings in Elemente kann mit der Funktion Length ermittelt werden. Beachten Sie bitte, dass das bei MBCS- und Unicode-Strings nicht notwendigerweise die Anzahl der Zeichen ist.

Die Länge eines kurzen Strings in Bytes kann mit der Funktion SizeOf ermittelt werden. Für die anderen String-Typen multiplizieren Sie Length mit {{Code|SizeOf}. Wenn S beispielsweise ein UnicodeString ist, ist seine Länge in Bytes Length(S) * SizeOf(S).

Beachten Sie die folgende Deklaration:

   S: string[n];

string deklariert implizit einen kurzen String, keinen String der Länge n. Wollen Sie einen String der angegebenen Länge n deklarieren, müssen Sie eine Variable des Typs string deklarieren und anschließend die Prozedur SetLength verwenden.

   S: string;
   SetLength(S, n);

Siehe auch