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.