比较炭变量与空char不起作用



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;

相关内容

  • 没有找到相关文章

最新更新