Delphi的String可以支持PChar格式, 因為它會在string的最後也放入#0字元
String變量也是一個指針, 但指向是一個Delphi定義的String結構的字符串部份
而不是單純的字元陣列, 如果以Record來表示, 它的定義應如下
TStringRec = record
AllocSiz: Longint
//內存配置大小
RefCnt: Longint
//字串引用次數
Length: Longint
//字串長度
CharArray: array[0..XXX] of char
end;
在此結構中, CharArray是可變長度的, 會依字串大小而配置
字符串變量會指向此結構CharArray的位置
如果以Length來取得S的長度, 它的做法其實是取S所指內存位置-4來取得
其實在Delphi在做為string到pchar時的強制轉換時, 也是透過函式的, 如 PChar(S)
是編釋器會將這語法轉為呼叫System的_LStrToPChar函式
怎麼做最主要避免一個問題, 是String允許nil指針來表示空字串, 幾乎所有系統的API
在傳入字符串參數傳入nil指針時, 都會出錯, 所以該函式主要來判斷, 如果傳入的S
為nil指針, 則傳回一個指向存放#0字元的內存, 以避免在呼叫API時出錯