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

vložil Radek Červinka 4. prosince 2019 19:24

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).

Tagy:

trik

Komentování ukončeno

Naše nabídka

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy).

love Delphi

O Delphi.cz

Delphi je moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX, Linux a na iPhone a Android.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Poslední komentáře

Comment RSS

Dle měsíců