Delphi中的空字符串

Tob*_*ner 0 delphi

我的问题如下:

WideCompareStr(FName,'')<>0
Run Code Online (Sandbox Code Playgroud)

即使FName设置为'',也返回false.

WideCompareStr(trim(FName),'')<>0
Run Code Online (Sandbox Code Playgroud)

返回所需的结果.为什么我要修剪一个空字符串('')与另一个空的sting进行比较以获得正确的结果?


编辑:

清理一下:我有以下代码来测试一个宽字符串变量是否为空字符串.

function TSybVerwandlung.isEmpty: Boolean;
var
  I : Integer;
begin
  Result:=true;
  if WideCompareStr(FName,'')<>0 then Result:=false
  else if WideCompareStr(FInfo,'')<>0 then Result:=false
  else
  begin
    //additional tests
  end;
end;
Run Code Online (Sandbox Code Playgroud)

即使FName设置为''(我在调试器中检查过它),此函数也返回true.在插入trim(FName)和trim(FInfo)而不是变量之后,它返回了所需的结果.

我错过了必要的东西吗?我使用的编译器是Borland Delphi 2006

Hem*_*ant 7

如果两个字符串相等,WideCompareStr返回0.所以代码:

WideCompareStr(FName,'')<>0
Run Code Online (Sandbox Code Playgroud)

返回false,因为两个字符串都相等,这正是您所期望的(我猜!).

编辑:

我现在很困惑.我刚检查并在下面的代码中:

procedure TForm1.Button1Click(Sender: TObject);
var
  s1: WideString;
  r1, r2: Integer;
begin
  s1 := '';

  r1 := WideCompareStr (s1, '');
  MessageDlg (IntToStr (r1), mtWarning, [mbOK], 0);

  r2 := WideCompareStr (Trim (s1), '');
  MessageDlg (IntToStr (r2), mtWarning, [mbOK], 0);
end;
Run Code Online (Sandbox Code Playgroud)

r1和r2均为零,这与预期的一样.而你的第二行实际上是一个语法错误(Trim只能接收一个参数).