Domanda

In Delphi 2010 (e probabilmente sotto D2009 anche) il tipo di stringa predefinita è UnicodeString.

Tuttavia, se dichiariamo ...

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

... poi la prima stringa s se dichiarato come UnicodeString , ma il secondo ss è dichiarato come AnsiString !

Possiamo controllare questo: SizeOf(s[1]); taglia 2 e SizeOf(ss[1]) tornerà; tornerà taglia 1.

Se io dichiaro ...

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

... di quanto io voglio che ss tipo è anche UnicodeString.

  1. Come posso dire a Delphi 2010, che entrambe le stringhe devono essere di tipo UnicodeString?
  2. In quale altro modo posso dichiarare che ss contiene quattro WideChars? Il compilatore non accetterà la WideString[4] dichiarazioni di tipo o UnicodeString[4].
  3. Qual è lo scopo della due diversi le dichiarazioni del compilatore per lo stesso Tipo Nome: stringa
È stato utile?

Soluzione

La risposta a questo sta nel fatto che string[n], che è una ShortString, è ormai considerato un tipo legacy. Embarcadero ha preso la decisione di non convertire ShortString per avere il supporto per Unicode. Dal momento che la stringa lunga è stata introdotta, se la memoria non inganna, in Delphi 2, che sembra una decisione ragionevole per me.

Se si vuole veramente fissi array di lunghezza di WideChar allora si può semplicemente dichiarare array [1..n] of char.

Altri suggerimenti

  1. Non è possibile, utilizzando string[4] come tipo. Dichiarando in questo modo rende automaticamente uno ShortString.

  2. dichiarare come un array di char invece, che renderà un array di 4 WideChars.

  3. Perché un string[4] rende una stringa contenente 4 caratteri. Tuttavia, dal momento che WideChars possono essere più di un byte di dimensione, questo sarebbe un) sbagliato, e b) confondendo. ShortStrings sono ancora in giro per compatibilità all'indietro, e sono automaticamente AnsiStrings perché sono costituiti da uno caratteri byte [x].

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top