5

在 Delphi 2010 下(也可能在 D2009 下),默认字符串类型是 UnicodeString。

但是,如果我们声明...

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

...然后第一个字符串s如果声明为UnicodeString,但第二个ss声明为AnsiString

我们可以检查一下:SizeOf(s[1]);将返回大小 2 和SizeOf(ss[1]); 将返回大小 1。

如果我声明...

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

...比我想要的ss也是 UnicodeString 类型。

  1. 我如何告诉 Delphi 2010 两个字符串都应该是 UnicodeString 类型?
  2. 我还能如何声明ss拥有四个 WideChars?编译器将不接受类型声明WideString[4]UnicodeString[4].
  3. 相同类型名称的两个不同编译器声明的目的是什么: string
4

2 回答 2

12

这个问题的答案在于string[n],它是一个ShortString,现在被认为是一个遗留类型。Embarcadero 决定不转换ShortString以支持 Unicode。由于引入了长字符串,如果我的记忆正确,在 Delphi 2 中,这对我来说似乎是一个合理的决定。

如果你真的想要固定长度的 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 的大小可以超过一个字节,这将是 a) 错误的,并且 b) 令人困惑。ShortStrings 仍然存在以实现向后兼容性,并且自动成为 AnsiStrings,因为它们由 [x] 个单字节字符组成。

于 2011-01-25T14:01:15.927 回答