将char变量与空char相比较不起作用

时间:2016-12-16 21:14:35

标签: compare character pascal

x是一个角色。 每当我if(x <> '')知道变量是否为空时,它就不起作用。 但是,当我尝试执行此操作if(x <> chr(0))时,它确实有效。 我在两个版本的编译器上尝试过相同的东西:Free Pascal和Charm Pascal,但我仍然遇到同样的问题。

1 个答案:

答案 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)视为特殊字符的惯例,意思是“字符串结束”。)但是约定要求分配额外的字符制作字符串内部长于文本长度。因此,如果环境不支持,技术
  • 最重要的是,从评论来看,您似乎可能会遇到 empty-string 之间的区别以及如何将其表示为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;