根据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[n], ,这是一个 ShortString, ,现在被认为是遗留类型。 Embarcadero做出了不转换的决定 ShortString 支持Unicode。由于引入了长字符串,如果我的记忆在Delphi 2中正确使用,这对我来说似乎是一个合理的决定。

如果您真的想要固定的长度阵列,那么您可以简单地声明 array [1..n] of char.

其他提示

  1. 你不能使用 string[4] 作为类型。以这种方式声明它会自动使其成为短串。

  2. 将其声明为炭数阵列,这将使它成为4个widechars的数组。

  3. 因为 string[4] 使其成为包含4个字符的字符串。但是,由于widechars的大小可能不止一个字节,所以这将是a)错误,b)令人困惑。短串仍然存在于向后兼容,并且自动隔离,因为它们由[x]一个字节字符组成。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top