System.AnsiString
Delphi
type AnsiString = { built-in type };
C++
typedef AnsiStringT<0> AnsiString;
Propriétés
Type | Visibilité | Source | Unité | Parent |
---|---|---|---|---|
type typedef |
public | System.pas sysmac.h |
System | System |
Description
Représente une chaîne allouée dynamiquement dont la longueur maximale n'est limitée que par la mémoire disponible.
Une variable AnsiString est une structure contenant des informations de chaîne. Quand la variable est vide (contenant une chaîne de longueur zéro), le pointeur est nil et la chaîne n'utilise pas de stockage supplémentaire. Quand la variable n'est pas vide, elle pointe sur un bloc de mémoire alloué dynamiquement qui contient la valeur de la chaîne. Cette mémoire est allouée sur le tas, mais sa gestion est entièrement automatique et ne nécessite pas de code utilisateur. La structure AnsiString contient un indicateur de longueur sur 32 bits, un compteur de références sur 32 bits, une longueur de données sur 16 bits indiquant le nombre d'octets par caractère, et une page de code sur 16 bits. Par défaut, cette page de code est définie sur la page de code du système d'exploitation. Elle peut être modifiée en appelant SetMultiByteConversionCodePage.
Un AnsiString représente une chaîne mono-octet. Avec un jeu de caractères sur un seul octet (SBCS), chaque octet d'une chaîne représente un caractère. Dans un jeu de caractères multi-octets (MBCS), les éléments sont toujours des octets uniques, mais certains caractères sont représentés par un octet et d'autres caractères par plusieurs octets. Les jeux de caractères multi-octets, en particulier les jeux de caractères sur deux octets (DBCS), sont fréquemment utilisés pour les langues asiatiques. Un AnsiString peut contenir des caractères MBCS.
L'indexation de AnsiString commence à 1. L'indexation des chaînes multi-octets n'est pas fiable, puisque S[i] représente le ième octet (et non nécessairement le ième caractère ) de S. Le ième octet peut être un caractère unique ou une partie d'un caractère. En revanche, les fonctions standard de manipulation de chaînes AnsiString ont également un équivalent multi-octets qui implémente aussi le tri des caractères en tenant compte de la localisation. Le nom des fonctions portant sur les caractères multi-octets commencent généralement par Ansi-. Ainsi, la version multi-octets de StrPos est AnsiStrPos. La gestion des caractères multi-octets dépend du système d'exploitation et se base sur la localisation en cours
Comme les variables AnsiString ont des pointeurs, plusieurs peuvent référencer la même valeur sans utiliser de mémoire supplémentaire. Le compilateur utilise ceci pour économiser les ressources et exécuter les affectations plus rapidement. A chaque fois qu'une variable AnsiString est détruite ou qu'une nouvelle valeur lui est affectée, le compteur de références de l'ancien AnsiString (la valeur précédente de la variable) est décrémenté et le compteur de références de la nouvelle valeur (s'il y en a une) est incrémenté. Si le compteur de références d'une chaîne devient nul, sa mémoire est libérée. Ce processus est appelé comptage de références. Quand des indices sont utilisés pour modifier la valeur d'un seul caractère d'une chaîne, une copie de la chaîne est effectuée si, et seulement si, son compteur de références est supérieur à un. On parle alors de sémantique copie-sur-écriture.
- Remarque : AnsiString est utilisé par les compilateurs de bureau Delphi, mais n'est pas supporté par les compilateurs mobiles Delphi. Pour de plus amples informations, voir Migration du code Delphi en mobile depuis le bureau.