String 如何在Delphi中定义空字符

String 如何在Delphi中定义空字符,string,delphi,char,String,Delphi,Char,只是出于好奇 为什么在Delphi中,如果我们通过以下方式定义空字符: a:Char; a:=''; 我们得到一个错误:不兼容的类型:“Char”和“string” 然而,如果我们 a:='a'; 可以吗 是否有必要通过以下方式定义空字符:a:=#0?没有空字符这回事。char必须有一个值。它是一种序数类型,一种简单的值类型。就像整数总是有值一样,char 值#0不是空的char,它是值为0的字符,通常称为NUL一个char是单个(即恰好一个)字符。那么‘a’,'∫', 而且⌬' 都可以,但

只是出于好奇

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

a:Char;
a:='';
我们得到一个错误:不兼容的类型:“Char”和“string”

然而,如果我们

a:='a';
可以吗


是否有必要通过以下方式定义空字符:
a:=#0

没有空字符这回事。
char
必须有一个值。它是一种序数类型,一种简单的值类型。就像整数总是有值一样,
char

#0
不是空的
char
,它是值为0的字符,通常称为
NUL

一个char是单个(即恰好一个)字符。那么‘a’,'∫', 而且⌬' 都可以,但不是“ab”(两个字符的字符串),“Hello World!”(十二个字符的字符串)或“”(零个字符的字符串)

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


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

u r正确使用最后一个编辑的短语,我的意思是空字符是空字符,但我认为当我放置:=''时,编译器默认情况下会将其视为#0,并且没有预料到这样的错误,所以我想知道这是为什么。提前谢谢@Zeina:当然,Delphi编译器可以将
'
视为
#0
的同义词,但我会发现这令人困惑。此外,编写
#0
是否真的比
'
要花那么多时间?@Marco:“遗留C系统”?Windows API?我一直不喜欢Delphi对
Char
String
文本使用单引号。这可能会使编码更容易,但也会造成类似的混乱。我主要使用C++,它使用字符串的单引号和双引号。对我来说更明确、更直观。@JonathanElkins:不,事实并非如此
'
只是一个空字符串,使用这种组合是完全合法的,就像在
ShowMessage('')
中一样。但是空字符串由零个字符组成,因此它不是一个字符。在.net世界中,您可以有一个“空”字符,因为它们具有可为空的类型(通过泛型系统)。在数据库世界中,数据库字段可以为空,但所有Delphi
Ordinal
类型,包括
Integer
Char
Byte
,以及其他类型,例如,它们可能有一些字符的前哨(标志)或零值(#0),不能为“空”或“空”。因为字符串和数组不是顺序类型,所以规则是不同的。字符串类似于“动态字符数组”。您对
'
常量表达式感到困惑。它属于
string
类型,与
char
类型不兼容。相反,
'a'
是兼容的。所以,您必须定义“空字符”约定。在Pascal中,这是
ordinal
type。