string - Is there any compiler magic in PChar / PWideChar / PAnsiChar casts? -
i read compiler kind of magic when casting pchar
.
the main purpose of pchar
phone call foreign code in libraries expect 0 terminated array of characters (c style "string").
pchar
type alias pwidechar
on unicode delphi , alias pansichar
on non-unicode delphi.
delphi strings (string
= ansistring
/ unicodestring
, i'm not talking widestring
here, allow lone shortstring
...) on other hand have hidden length instead of termination char. reference counted , utilize re-create on write.
are delphi strings automatically allocated , kept 1 char longer implicit #0 char in order create casting pchar
(pansichar / pwidechar) easier or compiler check , adjust string when encounters conversion pchar
?
the process follows:
if strings
has length greater zero, pchar(s)
returns pointer first element of string content. because string
managed have hidden null-terminator nil more needs done. if string s
has length zero, pchar(s)
returns pointer block of memory containing null-terminator. as implementation detail, null-terminator returned pchar(nil)
global constant allocated in read-only section of compiled module.
are delphi strings automatically allocated , kept 1 char longer implicit #0 char in order create casting pchar (pansichar / pwidechar) easier?
yes.
the magic, if can phone call that, that:
usingpchar()
on empty strings returns pointer null-terminator. delphi maintains hidden null-terminator @ end of string. string delphi pointers casting
No comments:
Post a Comment