Delphi中的字符串 Delphi中的字符串 在Delphi中字符串的定义和使用有多种方式，包括Pascal中典型的字符串（String）、Delphi支持的长字符串（ANSI String）、类似于C语言的字符数组（Array of Char）、指向字符的指针(Pchar)等。下面谈谈这些类型在定义和应用中的区别。 1.传统的Pascal字符串 在Pascal中，典型的字符串是一定长度的字符序列。每个字符串有一设定的长度（缺省值为255），例如：
Var
Address:String;
Name:String[10];
其中Address是一长度为255的字符串，Name的最大长度为10。
传统的Pascal字符串长度不能超过255，可以用字符串连接操作“+”把字符串连接在一起。
2.Delphi中的长字符串
Delphi除了支持传统的Pascal短字符串外还支持长字符串。长字符称为ANSI String。长字符串动态分配内存，即用字符串时才分配字符串所需内存，所以其长度不受限制。
在Delphi中，如果你用String作类型说明，则被说明的既可能是短字符串也可能是长字符串，这取决于编译器中$H开关的设置。默认值为$H+，代表ANSI长字符串，VCL中的组件使用ANSI长字符串。长字符串以null结束，与C语言中的以null结束的字符串完全兼容。
可以通过SetLength函数设置字符串的最大长度；用TrimLeft、TrimRight和Trim函数分别来消除字符串开头、结尾和首尾的空白区。
3.类似于C的字符数组
可以用数组来存储以null结束的字符串。如下定义：
var
name:array[0..10] of char;
4．Pchar指针
如果Delphi中的Exended Syntax已经设置（缺省值），字符数组就和指向字符的指针Pchar完全兼容，字符数组名即指向该字符数组首字符的指针。可以将字符串直接赋值给Pchar指针。例如：
var
P: PChar;
begin
P := ″Hello!″;
end;
这样P就指向存储字符串“Hello”并以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结束。
在使用Delphi中的字符串时，要时刻清楚该字符串的类型，以免引起混淆。在理解字符串时要把字符串与指针、内存分配联系起来，加强理解。
(李 秋)