Question

Sous Delphi 2010 (et probablement sous D2009 aussi) le type de chaîne par défaut est UnicodeString.

Toutefois, si nous déclarons ...

const
 s  :string = 'Test';
 ss :string[4] = 'Test';

... alors la première chaîne s si elle est déclarée comme UnicodeString , mais le second ss est déclarée comme AnsiString !

Nous pouvons vérifier: SizeOf(s[1]); retournera la taille 2 et SizeOf(ss[1]); retourne la taille 1.

Si je déclare ...

var
  s  :string;
  ss :string[4];

... que je ne veux que ss est également le type UnicodeString.

  1. Comment puis-je dire à Delphi 2010 que les deux chaînes doivent être de type UnicodeString?
  2. Comment puis-je déclarer que ss détient quatre WideChars? Le compilateur n'acceptera les déclarations de type WideString[4] ou UnicodeString[4].
  3. Quel est l'objectif de deux différents déclarations du compilateur pour le même type nom: chaîne
Était-ce utile?

La solution

La réponse réside dans le fait que string[n], qui est un ShortString, est maintenant considéré comme un type d'héritage. Embarcadero a pris la décision de ne pas convertir ShortString d'avoir un support pour Unicode. Depuis la longue chaîne a été introduite, si ma mémoire est bonne, dans Delphi 2, qui me semble une décision raisonnable.

Si vous voulez vraiment des tableaux de longueur fixe de WideChar alors vous pouvez simplement déclarer array [1..n] of char.

Autres conseils

  1. Vous ne pouvez pas, en utilisant string[4] comme type. Déclarant cette façon fait automatiquement ShortString.

  2. déclarerons comme un tableau de char à la place, ce qui rendra un tableau de 4 WideChars.

  3. Parce qu'un string[4] fait une chaîne contenant 4 caractères. Cependant, étant donné que WideChars peut être plus d'un octet de taille, ce serait a) tort, et b) la confusion. ShortStrings sont toujours là pour une compatibilité descendante, et sont automatiquement AnsiStrings car ils sont constitués de [x] un caractère d'octet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top