Rozhodl jsem se, že zkusím nějakou sérii malých článků o drobnostech. První bude spíše částečně nedokumentované chování.
System.Copy
function Copy(S: <string or dynamic array>; Index: Integer; Count: Integer): string;
z helpu:
"When S is a dynamic array, you can omit the Index and Count
parameters and Copy copies the entire array."
takže
var
s: string;
s2: string;
begin
s := 'Hello cool';
s2 := Copy(s, 3); // <<<<<<<<<< jen 2 parametry
ShowMessage(s2);
v assembleru Win32
Unit1.pas.32: s2 := Copy(s, 3);
lea eax,[ebp-$0c]
push eax
mov ecx,$7fffffff <<<< MaxInt
mov edx,$00000003
mov eax,[ebp-$08]
call @UStrCopy
Jako poslední parametr je předán interně MaxInt a Copy vždy kontroluje zda délka odpovídá (můžete si ušetřit počítání zbývajících znaků - v helpu je popsáno, že se kontrola provede, aspoň se neseknete o 1).
Datum: 2019-12-04 18:24:00 Tagy: