说x
是一个角色。
每当我if(x <> '')
知道变量是否为空时,它就不起作用。
但是,当我尝试执行此操作if(x <> chr(0))
时,它确实有效。
我在两个版本的编译器上尝试过相同的东西:Free Pascal和Charm Pascal,但我仍然遇到同样的问题。
答案 0 :(得分:3)
没有“空炭”这样的东西。 Char
类型始终是单个字符。
该字符可以是1字节AnsiChar
,表示来自0..255
的值。 (在Delphi和fpc中,它也可以是2字节WideChar
,表示来自0..65535
的值。)无论哪种方式,它始终表示为'<something>'
。那“某事”必须是一个人物价值。
当您比较x <> Chr(0)
时,您正在使用0
的字节值并将其转换为Char
,因此可以执行有效的比较。
对于Char
可靠,概念“无值”需要存储其他信息。例如。数据库可能有一个隐藏的内部位字段,表示值为NULL
。重要的是要注意,如果它不是NULL
,它与根本不同与它可能具有的任何有效值。与数据库交互的库需要提供一种方法来确定值是否为NULL
。
您尚未提供有关您尝试解决的实际问题的任何信息,但以下是一些可能会取得进展的想法:
' '
进行比较。Length()
会更加可靠。
Char(0)
视为特殊字符的惯例,意思是“字符串结束”。)但是约定要求分配额外的字符制作字符串内部长于文本长度。因此,如果环境不支持,技术 。Char
。关键是它不是。你需要检查字符串的长度。E.g。您可以执行以下操作:
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;