说 x
是一个角色。每当我做if(x <> '')
以了解变量是否为空时,它就不起作用。但是,当我尝试执行此if(x <> chr(0))
时,它确实有效。我在编译器的两个版本上尝试过同样的事情:免费的pascal和魅力帕斯卡尔,但我仍然面临同样的问题。
没有诸如"空char"之类的东西。Char
类型始终是一个字符。
该字符可以是1个字节AnsiChar
,代表来自0..255
的值。(在Delphi和FPC中,它也可能是2个字节WideChar
,代表0..65535
的值。)无论哪种方式,它始终表示为'<something>'
。那是"某物"必须是角色值。
当您比较x <> Chr(0)
时,您正在使用0
的字节值并将其转换为Char
,因此可以进行有效的比较。
侧注
对于 Char
to 可靠地具有"无价值"的概念。需要存储其他信息。例如。数据库可能具有a 隐藏的内部位字段,表明该值为NULL
。重要的是要意识到,如果不是NULL
,这与其可能具有的任何有效值根本不同。与数据库互动的库需要提供一种方法来确定值是否为 NULL
。
您尚未提供有关您要解决的实际问题的任何信息,但这里有一些可能会带来进展的想法:
- 如果您正在处理用户输入,则与太空字符
' '
进行比较可能更合适。 - 如果您要处理从文件中读取的字符,则可能应该检查实际读取的字节/字符数量。
- 如果您要确定字符串的末端,使用字符串的
Length()
更为可靠。- (尽管有些环境使用将
Char(0)
视为特殊字符的惯例,含义"弦乐"。长于其文字长度。因此,如果环境不支持它,技术不可用。
- (尽管有些环境使用将
- 最重要的是,从评论看来,您可能正在为空弦之间的区别以及如何表示为
Char
。关键是不是。您需要检查字符串的长度。
例如。您可以执行以下操作:
if (s <> '') then
begin
{ You now know there is at least 1 character in the string so
you can safely read it and not worry about "if it has a value".}
x := s[1];
...
end;