pchar()含义和用法是什么?是否是将字符串改为指针?请给个例子?(50分)

  • 主题发起人 主题发起人 夏敏
  • 开始时间 开始时间

夏敏

Unregistered / Unconfirmed
GUEST, unregistred user!
pchar()含义和用法是什么?是否是将字符串改为指针?请给个例子?
 
就是将字符串改为指针
var
A:String;
B:PChar;
A:='abcd';
B:=PChar(A);
注意:(help)
A common error when working with PChars is to store in a data structure, or return as a value, a local variable. When your routine ends, the PChar will disappear because it is simply a pointer to memory, and is not a reference counted copy of the string. For example:

function title(n: Integer): PChar;

var
s: string;
begin
s := Format('title - %d', [n]);
Result := PChar(s)
// DON'T DO THIS
end;

This example returns a pointer to string data that is freed when the title function returns.
 
pchar是获得字符串中第一个字符的内存地址。
 
呵呵,偶也来说两句:
1、PCHAR一般是用来调用API的,因为API中没有STRING类型,只有指针类型,所以就
还有,你看看以下信息:
来自:柳五公子, 时间:1998-10-22 14:17:00, ID:64988
1. String是Pascal使用的字符串格式.它分为ShortString,
WideString和AnsiString,String缺省为AnsiString.
ShortString的最大长度为255个字符.
AnsiString 的最大长度为2^31个字符.
WideString 的最大长度为2^30个字符.
AnsiString和WideString的区别在于字符集的不同.
AnsiString对应于AnsiChar,WideString对应于WideChar.
具体你可以参考Delphi Help中String Type帮助.

2. PChar是Delphi为了和C语言的字符串类型(char *)兼容,
以便调用Windows API而建立的数据类型.所以pchar实际是
一个指针.一般使用方法是:
pchar eg1

GetMem(eg1,Size)
//你程序中出错就是因为没有为它分配内存
...
FreeMem(eg1,Size)

你还可以用以下方法

eg2 :array[0..Size] of char

然后可以把eg2看作pchar来用,且它已预先分配了内存.
要注意的是定义eg2的字符数组下界必须是0 !否则将会出现错误.

3. 在Delphi 1.0中的String和PChar的相互转换为:
function StrPas(str :pchar):string

function StrPCopy(Dest:Pchar;Source:string):pchar

在Delphi 2.0和更高版本中的String和PChar的相互转换很简单:
String ->Pchar: pch :=Pchar(str)

Pchar ->String: str :=pch


4. String和pchar的内存实现方法略有不同(虽然他们实际上都是指针),
所以你的例程中不能用pchar(str)来将返回值强制放入str中,而要首先
用一个pchar型变量获得返回值(首先需为其分配内存),然后用
str:=pAddress转换为string型放入str中.
###

 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
916
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部