Strings deklarieren und initialisieren
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);