我的问题如下:
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
如果两个字符串相等,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只能接收一个参数).