【问题标题】:How to define Empty Char in Delphi如何在 Delphi 中定义空字符
【发布时间】:2012-03-25 23:46:42
【问题描述】:

只是为了好奇,

为什么在 Delphi 中,如果我们通过以下方式定义一个空字符:

a:Char;
a:='';

我们得到一个错误:不兼容的类型:'Char' and 'string'

但是,如果我们放置

a:='a';

会好吗?

是否需要通过a:=#0定义一个空字符?

【问题讨论】:

  • 在 .net 世界中,您可能有一个“空”字符,因为它们具有 Nullable 类型(通过它们的泛型系统)。在数据库世界中,数据库字段可以为 Nullable,但所有 Delphi Ordinal 类型,包括 IntegerCharByte 等等,虽然它们可能有一些标记(标志)或零值( #0) 对于 Char,例如,不能为“空”或“空”。由于字符串和数组不是 Ordinal 类型,因此规则是不同的。字符串就像一个“动态字符数组”。
  • 您对'' 常量表达式感到困惑。它属于string 类型,与char 类型不兼容。相反'a' 是兼容的。因此,您必须定义“空字符”约定。

标签: string delphi char


【解决方案1】:

没有空的char 这样的东西。 char 必须有一个值。它是一个序数类型,一个简单的值类型。就像整数总是有值一样,char 也是如此。

#0的值不是空的char,是值为0的字符,俗称NUL

【讨论】:

  • 在 Pascal 中就是 ordinal 类型。
【解决方案2】:

char 是单个(即,恰好是一个)字符。所以'a'、'∫'和'⌬'都可以,但'ab'(两个字符的字符串)不行,'Hello World!' (一个十二个字符的字符串),或 ''(一个零字符的字符串)。

但是,NULL 字符 (#0) 与其他字符一样。

此外,字符数据类型被实现为一个单词(在现代版本的 Delphi 中),即两个字节。如果所有这些值 0, 1, ..., 2^16 - 1 都用于真实字符,那么您将如何表示您的“空字符”?

【讨论】:

  • 你在最后一个编辑的短语右边,我的意思是空字符一个空字符,但我认为当我放置 a:='' 时,编译器默认将它作为#0,并且没想到会出现这样的错误,所以我想知道为什么会这样。提前致谢!
  • @Zeina:当然,Delphi 编译器可以将'' 视为#0 的同义词,但我会觉得这很混乱。另外,写#0真的比写''要花那么多时间吗?
  • @Marco:'传统 C 系统'? Windows API?
  • 我一直不喜欢 Delphi 对 CharString 文字都使用单引号。它可能会使编码更容易,但也会导致这样的混乱。我主要使用 C++,它对字符使用单引号,对字符串使用双引号。对我来说更明确、更直观。
  • @JonathanElkins:不,事实并非如此。 '' 只是一个空字符串,使用这种组合是完全合法的,就像在 ShowMessage('') 中一样。但是空字符串由零个字符组成,所以它不是一个字符。
猜你喜欢
  • 2010-09-23
  • 1970-01-01
  • 2021-10-05
  • 1970-01-01
  • 2023-01-30
相关资源
最近更新 更多