程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 詳解Delphi中的字符串

詳解Delphi中的字符串

編輯:Delphi

一:各種字符串

字符串是ObjectPascal所有數據類型中最有用的類型。許多函數以字符串為傳遞參數。由於在Delphi中字符串的定義和使用有各種方式,包括Pascal中典型的字符串(String),Delphi支持的長字符串(ANSIString),類似於C語言的字符數組(ArrayofChar),指向字符的指針(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]ofChar;

4.Pchar指針

如果Delphi中的ExendedSyntax已經設置(缺省值),以0為起點的字符數組就和指向字符的指針Pchar完全兼容,因為以0為起點的字符數組名即指向該字符數組首字符的指針。可以將字符串直接付值給Pchar指針。例如:

var
P:PChar;
begin
P:='Helloworld';
end;
  這樣P就指向存儲字符串'Helloworld'並以null結束的一塊內存。

許多Windows的應用程序接口API函數要求用Pchar類型作參數。Pchar指針在使用是首先用GetMem(varP:Pointer;Size:Integer)函數申請分配內存,程序結束時用FreeMem(varP:Pointer[;Size:Integer])函數釋放內存。例如:

VarWinDir,SysDir:Pchar;
Begin
GetMem(WinDir,256);{為指針分配內存}
GetWindowsDirectory(WinDir,128);{將Windows安裝目錄放至WinDir}
ShowMessage('Windowsdirectoryis'+WinDir);{顯示結果}
End;

二:字符串轉換

以上介紹了Delphi中的四類字符串的定義和使用。由於各類函數對字符串參數類型要求不一,這就需要進行字符串類型轉換。

1.可以用StrPas將以null結束的字符串轉換為Pascal短字符串。StrpCopy則完成相反的轉換。

2.因為長字符串以null結束,所以可以用強制類型轉換將長字符串轉換成Pchar類型。用法是:Pchar(s),s是一個長字符串。強制類型轉換返回一個指向長字符串首字符的指針,並且所指字符串以null結束。例如:

Var
Caption,Message:string;
Caption:='HelloWorld!';
Mssage:='Thisisatestoflongstring';
MessageBox(0,Pchar(Message),Pchar(Caption),MB_OK);

小結:在使用Delphi中的字符串時,要時刻清楚該字符串的類型,以免引起混淆。在理解字符串時要把字符串與指針,內存分配聯系起來,加強理解。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved