-1

Tree 反復の比較演算子があります。AnsiString 変数を使用します。私の問題は、値が等しいように見えるときに、等しいインジケーターを取得していないことです (別名、System.AnsiStrings.CompareStr から 0 を取得していません)。デバッガーを介して変数を確認し、コードをステップ実行しました。両方の変数は AnsiString であり、両方とも同じ値で、スペースはありません。CompareStr は、それが役立つ場合は -65 を返します。

私は何を見落とすことができますか?これが私のコードです。

  function CompareNodes(idVal: pointer; ANode: TALStringKeyAVLBinaryTreeNode): Integer;
  var
    Key1, Key2: AnsiString;
  begin
    Key1 := PAnsiString(idVal)^;
    Key2 := ANode.ID;

    Result := System.AnsiStrings.CompareStr(Key1, Key2);
  end;
4

2 に答える 2

2

A65 が と の差であることは興味深いことです#0

この行はポインターの未チェックの型キャストをKey1 := PAnsiString(idVal)^;実行するため、実際に Wide/Unicode 文字列を参照している可能性があります。これは、AnsiString ではないものを AnsiString であるかのように処理しようとしていることを意味ます。idValidValKey1

OPのコメントに基づく:

私の答えが見つかりました....どういうわけか、AnsiStringではなく、文字列が入力に使用されていました。-65 は、この状況が発生した場合の指標である可能性があります...

それがまさに問題です。

于 2014-11-17T09:37:38.057 に答える