Delphi.cz

Český portál Delphi

Delphi trik 1: System.Copy, string a 3. parametr

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:

trik