Einzelnen Beitrag anzeigen

Robert Marquardt
(Gast)

n/a Beiträge
 
#5

Re: Hilfe beim Übersetzten von C in Delphi

  Alt 23. Mär 2007, 08:18
Mit Length kommst du hier nicht weit. StrLen ist angesagt, da es sich um C strings handelt.
Delphi-Quellcode:
function GetIndexToNextCharAfterSubString(Buffer: PChar; SubString: PChar; MaxLen: UINT): UINT;
var
  I: UINT;
  SubLen, BufLen: UINT;
begin
  SubLen := StrLen(SubString);
  BufLen := StrLen(Buffer);
  for I := 0 to MaxLen - SubLen - 1 do
  begin
    // Vortest, falls in Buffer ein C string steht, der kuerzer als MaxLen ist
    // der originale Vortest ist idiotisch, da er dauernd strlen aufruft
    if (BufLen - I >= SubLen) and
      // Vortest, um weniger strncmp aufzurufen
      (Buffer[I] = SubString[0]) and
      (StrLComp(@Buffer[I], SubString, SubLen) = 0) then
      begin
        Result := I + SubLen;
        Exit;
      end;
  end;


   // Hier steht weiterer Code
end;
Der Code ist sowohl in C als auch in Delphi unsicher, da er erstens weder Buffer noch SubString auf NULL/nil testet und nicht beruecksichtigt das SubLen >= MaxLen sein koennte und damit die Schleife Amok laeuft.
  Mit Zitat antworten Zitat