用好Delphi中的字符串 日期:2005年10月18日 做者: 人氣:17184 查看:[大字體 中字體 小字體] 一:各類字符串 字符串是Object Pascal全部數據類型中最有用的類型。許多函數以字符串爲傳遞參數。因爲在Delphi中字符串的定義和使用有各類方式,包括Pascal中典型的字符串(String),Delphi支持的長字符串(ANSIString),相似於C語言的字符數組(Array of Char),指向字符的指針(Pchar)等。下面的文章就跟談談這些類型在定義和應用中的區別和注意事項。 1. 傳統的Pascal字符串 在Pascal中,典型的字符串是必定長度的字符序列。每一字符串有一設定的長度(缺省值爲255),下面是一個例子: Var Address:String; Code:String[50]; Address是一長度爲255的字符串,Code的最大長度爲50。 傳統的Pascal字符串長度不能超過255。 能夠用字符串鏈接操做"+"把字符串鏈接在一塊兒: Result:=String1+String2; 2. Delphi中的長字符串 Delphi除了支持傳統的Pascal短字符串還支持長字符串。長字符稱爲ANSIString。長字符串動態分配內存,即用字符串時才分配字符串所需內存,因此其長度不受限制。在Delphi中你若是用String1:String做類型說明,則String1既多是短字符串也多是長字符串,這取決於編譯器中$H開關的設置。默認值爲$H+,表明ANSI長字符串,VCL中的組件使用ANSI長字符串。長字符串以null結束,這就說明長字符串與C語言中的以null結束的字符串徹底兼容。 能夠經過SetLength函數設置字符串的最大長度: SetLength(String1,100);用TrimLeft,TrimRight和Trim函數分別來消除字符串開頭,結尾和首尾的空白區。 3. 相似於C的字符數組 能夠用以0爲起點的數組來存儲以null結束的字符串。以下定義: Var Name:Array[0..50] of Char; 4. Pchar指針 若是Delphi中的Exended Syntax 已經設置(缺省值),以0爲起點的字符數組就和指向字符的指針Pchar徹底兼容,由於以0爲起點的字符數組名即指向該字符數組首字符的指針。能夠將字符串直接付值給Pchar指針。例如: var P: PChar; begin P := 'Hello world'; end; 這樣P就指向存儲字符串'Hello world'並以null結束的一塊內存。 許多Windows的應用程序接口API函數要求用Pchar類型做參數。Pchar指針在使用是首先用GetMem(var P: Pointer; Size: Integer)函數申請分配內存,程序結束時用FreeMem(var P: Pointer[; Size: Integer])函數釋放內存。例如: Var WinDir,SysDir:Pchar; Begin GetMem(WinDir,256);{爲指針分配內存} GetWindowsDirectory(WinDir,128);{將Windows安裝目錄放至WinDir} ShowMessage('Windows directory is'+WinDir);{顯示結果} End; 二:字符串轉換 以上介紹了Delphi中的四類字符串的定義和使用。因爲各種函數對字符串參數類型要求不一,這就須要進行字符串類型轉換。 1. 能夠用StrPas將以null結束的字符串轉換爲Pascal短字符串。StrpCopy則完成相反的轉換。 2. 由於長字符串以null結束,因此能夠用強制類型轉換將長字符串轉換成Pchar類型。用法是:Pchar(s),s是一個長字符串。強制類型轉換返回一個指向長字符串首字符的指針,而且所指字符串以null 結束。例如: Var Caption,Message:string; Caption:='Hello World!'; Mssage:='This is a test of long string'; MessageBox(0,Pchar(Message),Pchar(Caption),MB_OK); 小結:在使用Delphi中的字符串時,要時刻清楚該字符串的類型,以避免引發混淆。在理解字符串時要把字符串與指針,內存分配聯繫起來,增強理解。數組
(出處:DelphiFans.com)函數