5

Delphi 2010 では (おそらく D2009 でも)、デフォルトの文字列型は UnicodeString です。

ただし、宣言すると...

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

...最初の文字列sはUnicodeStringとして宣言されていますが、2 番目の文字列ssはAnsiStringとして宣言されています!

これを確認できます:SizeOf(s[1]);サイズ 2 と を返しSizeOf(ss[1])ます。サイズ 1 を返します。

宣言したら…

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

... ssも UnicodeString 型であることを望みます。

  1. 両方の文字列が UnicodeString 型であることを Delphi 2010 に伝えるにはどうすればよいですか?
  2. ssが 4 つの WideChar を保持していることを他にどのように宣言できますか? WideString[4]コンパイラは型宣言orを受け入れませんUnicodeString[4]
  3. 同じ型名stringに対する 2つの異なるコンパイラ宣言の目的は何ですか?
4

2 に答える 2

12

これに対する答えstring[n]は、であるがShortStringレガシータイプと見なされるようになったという事実にあります。Embarcaderoは、ShortStringUnicodeをサポートするように変換しないという決定を下しました。長い文字列が導入されて以来、私の記憶が正しく機能していれば、Delphi2ではそれは私には合理的な決断のように思えます。

WideCharの固定長配列が本当に必要な場合は、を宣言するだけarray [1..n] of charです。

于 2011-01-25T14:02:32.627 に答える
4
  1. string[4]タイプとして使用することはできません。そのように宣言すると、自動的に ShortString になります。

  2. 代わりに Char の配列として宣言すると、4 つの WideChar の配列になります。

  3. astring[4]は 4 文字を含む文字列にするためです。ただし、WideChars のサイズは 1 バイトを超える可能性があるため、これは a) 誤りであり、b) 混乱を招きます。ShortString は下位互換性のためにまだ存在しており、[x] 個の 1 バイト文字で構成されているため、自動的に AnsiString になります。

于 2011-01-25T14:01:15.927 に答える