Frage

Unter Delphi 2010 (und wahrscheinlich auch unter D2009) ist der Standard -String -Typ Unicodestring.

Allerdings, wenn wir deklarieren ...

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

... dann die erste Zeichenfolge s wenn Unicodestring, aber der zweite ss wird deklariert als Ansistring!

Wir können das überprüfen: SizeOf(s[1]); wird die Größe 2 zurückgeben und SizeOf(ss[1]); wird die Größe 1 zurückgeben.

Wenn ich erkläre ...

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

... als ich das will ss ist auch ein Unicodestring -Typ.

  1. Wie kann ich Delphi 2010 erkennen, dass beide Saiten ein Unicodestring -Typ sein sollten?
  2. Wie kann ich das sonst erklären? ss Hält vier Widechars? Der Compiler akzeptiert die Typdeklarationen nicht WideString[4] oder UnicodeString[4].
  3. Was ist der Zweck von zwei anders Compiler -Erklärungen für dasselbe Typ Name: Saite?
War es hilfreich?

Lösung

Die Antwort darauf liegt in der Tatsache, dass string[n], die ein ShortString, wird jetzt als Legacy -Typ angesehen. Embarcadero traf die Entscheidung, sich nicht zu konvertieren ShortString Unterstützung für Unicode zu haben. Da die lange Saite eingeführt wurde, wenn mein Gedächtnis in Delphi 2 korrekt dient, scheint mir das eine vernünftige Entscheidung zu sein.

Wenn Sie wirklich feste Längenarrays von Widechar wünschen, können Sie einfach deklarieren array [1..n] of char.

Andere Tipps

  1. Sie können nicht, verwenden string[4] als Typ. Das Ernennen so automatisch macht es zu einem Kurzschluss.

  2. Erklären Sie es stattdessen als eine Reihe von Char, was es zu einer Reihe von 4 Widechars macht.

  3. Weil ein string[4] macht es zu einer Zeichenfolge mit 4 Zeichen. Da Widechars jedoch mehr als ein Byte groß sein können, wäre dies a) falsch und b) verwirrend. Shortstrings sind immer noch für die Rückwärtskompatibilität und sind automatisch anSstrings, da sie aus [x] ein Byte -Zeichen bestehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top