Pregunta

Bajo Delphi 2010 (y probablemente también bajo D2009), el tipo de cadena predeterminado es unicodestring.

Sin embargo, si declaramos ...

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

... Entonces la primera cadena s Si se declara como Unicodestrillo, pero el segundo ss se declara como Anisistring!

Podemos verificar esto: SizeOf(s[1]); devolverá el tamaño 2 y SizeOf(ss[1]); devolverá el tamaño 1.

Si declaro ...

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

... de lo que quiero eso ss también es de tipo unicodestring.

  1. ¿Cómo puedo decirle a Delphi 2010 que ambas cuerdas deberían ser de tipo unicodestring?
  2. ¿De qué otra manera puedo declarar que ss ¿Tiene cuatro Widecars? El compilador no aceptará las declaraciones de tipo WideString[4] o UnicodeString[4].
  3. ¿Cuál es el propósito de dos? diferente Declaraciones del compilador para el mismo escribe nombre: cuerda?
¿Fue útil?

Solución

La respuesta a esto radica en el hecho de que string[n], el cual es un ShortString, ahora se considera un tipo heredado. Embarcadero tomó la decisión de no convertir ShortString tener apoyo para Unicode. Dado que se introdujo la cadena larga, si mi memoria sirve correctamente, en Delphi 2, esa me parece una decisión razonable.

Si realmente desea matrices de longitud fija de Widechar, simplemente puede declarar array [1..n] of char.

Otros consejos

  1. No puedes, usando string[4] como el tipo. Declararlo de esa manera automáticamente lo convierte en un cortometraje.

  2. Declararlo como una variedad de char, lo que lo convertirá en una variedad de 4 Widecars.

  3. Porque un string[4] lo convierte en una cadena que contiene 4 caracteres. Sin embargo, dado que Widecars puede tener más de un byte de tamaño, esto sería a) incorrecto y b) confuso. Las cuerdas cortas todavía están presentes para la compatibilidad con atraso, y son automáticamente y se aplican porque consisten en [x] un byte Chars.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top