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);