在delphi中,这个PChar指针的作用是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在delphi中,这个PChar指针的作用是啥?相关的知识,希望对你有一定的参考价值。

求详细解答!!!!!!!!

参考技术A 指向字符串的内存指针,做为字符串解释时,遇到Chr(0)即代表字符串的结束 参考技术B 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函数分别来消除字符串开头,结尾和首尾的空白区。

  如果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中的字符串时,要时刻清楚该字符串的类型,以免引起混淆。在理解字符串时要把字符串与指针,内存分配联系起来,加强理解。

以上是关于在delphi中,这个PChar指针的作用是啥?的主要内容,如果未能解决你的问题,请参考以下文章

请问delphi中pchar()是个啥函数,返回啥值?

delphi中pcharcharstring的定义与区别

delphi7 PChar 转为 String 弹出乱码

在delphi中Pansichar是啥类型

Delphi2007升级到Delphi 2010总结

在.net中调用Delphi dll的Pchar转换