System.AnsiString

Aus RAD Studio API Documentation
Wechseln zu: Navigation, Suche

Delphi

type AnsiString = { built-in type };

C++

typedef  AnsiStringT<0> AnsiString;

Eigenschaften

Typ Sichtbarkeit Quelle Unit Übergeordnet
type
typedef
public
System.pas
sysmac.h
System System

Beschreibung

Repräsentiert einen dynamisch zugewiesenen String, dessen maximale Länge nur durch den verfügbaren Speicherplatz begrenzt wird.

Eine AnsiString-Variable ist eine Struktur, die String-Informationen enthält. Wenn die Variable leer ist (also einen String der Länge Null enthält), hat der Zeiger den Wert nil, und der String belegt keinen zusätzlichen Speicherplatz. Ist die Variable nicht leer, zeigt sie auf einen dynamisch zugewiesenen Speicherblock, der einen String-Wert enthält. Da dieser Speicherplatz auf dem Heap reserviert und vollkommen automatisch verwaltet wird, erfordert er keinerlei Benutzercode. Die Struktur AnsiString enthält eine 32-Bit Längenangabe, einen 32-Bit Referenzzähler, eine 16-Bit Datenlänge, die die Anzahl der Bytes pro Zeichen angibt, und eine 16-Bit Codeseite. Diese Codeseite ist standardmäßig auf die Codeseite des Betriebssystems gesetzt und kann durch den Auffruf von SetMultiByteConversionCodePage geändert werden.

Ein AnsiString repräsentiert einen Einzelbyte-String. Bei einem Einzelbyte-Zeichensatz (SBCS = Single-Byte Character Set) repräsentiert jedes Byte eines Strings ein Zeichen. In einem Multibyte-Zeichensatz (MBCS = Multi-Byte Character Set) sind die Elemente weiterhin Einzelbytes, aber einige Zeichen werden mit einem einzelnen Byte und andere mit mehreren Bytes dargestellt. Multibyte-Zeichensätze, insbesondere Doppelbyte-Zeichensätze (DBCS = Double-Byte Character Set), werden in erster Linie für asiatische Sprachen verwendet. Ein AnsiString kann MBCS-Zeichen enthalten.

Die Indizierung von AnsiString beginnt bei 1. Die Indizierung von Multibyte-Strings ist nicht zuverlässig, weil S[i] das i-te Byte (nicht zwangsläufig das i-te Zeichen) in S repräsentiert. Das i-te Byte kann ein einzelnes Zeichen oder Teil eines Zeichens sein. Jedoch gibt es für alle Standardfunktionen zur AnsiString-Verarbeitung multibytefähige Entsprechungen, die auch die Besonderheiten länderspezifischer Zeichensätze berücksichtigen. Die Namen von Multibyte-Funktionen beginnen normalerweise mit dem Wort Ansi. So ist AnsiStrPos beispielsweise die Multibyte-Version von StrPos. Die Unterstützung von Multibyte-Zeichen ist betriebssystemabhängig und basiert auf dem verwendeten Gebietsschema.

Da AnsiString-Variablen Zeiger haben, können zwei oder mehrere dieser Variablen auf denselben Wert zeigen, ohne zusätzlichen Speicherplatz zu belegen. Der Compiler nützt dies zur Einsparung von Ressourcen. Auch Zuweisungen werden schneller ausgeführt. Sobald eine AnsiString-Variable freigegeben oder mit einem neuen Wert belegt wird, wird der Referenzzähler des alten AnsiString (d.h. des vorhergehenden Wertes der Variablen) verringert und der Referenzzähler des neuen Wertes (falls ein solcher zugewiesen wurde) erhöht. Erreicht der Referenzzähler eines Strings den Wert Null, wird der belegte Speicherplatz freigegeben. Dieser Vorgang wird als Referenzzählung bezeichnet. Wenn der Wert eines einzelnen Zeichens im String über einen Index geändert werden soll, wird eine Kopie des Strings angelegt. Dies ist aber nur möglich, wenn der betreffende Referenzzähler größer als 1 ist. Diesen Vorgang nennt man Copy-on-Write-Semantik.

Hinweis: AnsiString wird von den mobilen Delphi-Compilern nicht unterstützt, wird aber von den Delphi-Desktop-Compilern verwendet. Weitere Informationen finden Sie unter Migrieren von Delphi-Code zu mobilen Anwendungen vom Desktop aus.

Siehe auch