Bezüglich des Operators ansich hast du Recht:
- ++i
ist der Pre-increment-Operator, der zuerst inkrementiert, bevor er die Variable verwendet. Wenn i = 0
, dann steht nach x = ++i
die Zahl 1
in x
.
- i++
ist der Post-increment-Operator, der erst inkrementiert, nachdem er die Variable verwendet. Wenn i = 0
, dann steht nach x = i++
die Zahl 0
in x
.
In beiden Fällen ist
i
nach der Ausführung
1
.
Dein Originalcode hat dennoch auf
Pattern[-1]
zugegriffen, was im Zweifelsfalle eine Zugriffsverletzung darstellt.
1 zu 1 übersetzt sollte die Funktion ca. so aussehen (mit der PWideChar zu PAnsiChar Änderung):
Delphi-Quellcode:
function tcsstr(Str, Pattern: PAnsiChar): PAnsiChar;
var
I: Integer;
begin
Assert(Assigned(Str) and Assigned(Pattern));
I := 0;
while (Pattern[I] <> #0) do
begin
if (Str[I] = #0) then
begin
Exit(nil);
end;
if (Str[I] <> Pattern[I]) then
begin
Inc(Str);
I := -1;
end;
Inc(I);
end;
Result := Str;
end;