pchar -> string ? ( 积分: 5 )

  • 主题发起人 主题发起人 lordofbinladen
  • 开始时间 开始时间
L

lordofbinladen

Unregistered / Unconfirmed
GUEST, unregistred user!
pchar -&gt
string ?
 
pchar -&gt
string ?
 
var
p1:pchar;
s1:string;
begin
P1:=StrAlloc(64*SizeOf(char));
StrPCopy(p1,'Delphi 7.0');
s1:=StrPas(p1);
StrDispose(p1);
end;
 
pchar -&gt
string ?
直接赋值
 
首先,要清楚PChar跟string的区别:
1,string有引用计数,而PChar没有.
2,PChar是一个指针,而string不是
3,string有长度,而PChar仅仅是指向null结束的串,没有记录长度.
从内存结构看,string在负偏移的位置占用了8个字节,分别保存了串长和串引用计数
比如var s1:string
s1 := '1234';则s1的内存结构为
00000001 00000004 '123'#0
引用计数 串长 串的值
而PChar除了Null外没有其他额外的域,所以string到PChar的转换是安全的.比如
var
s1:string;
p1:PChar;
begin
s1:='1234';
p1:=PChar(s1);
end;
而PChar到string的转换就没这么简单了.
 
string的引用计数跟串长等都是由编译器维护的,所以转换反而简单,因为很多工作borland
帮你做了.
var
p1:PChar;
s1:string;
begin
...
s1:=p1
//直接赋值即可.
...
end;
 
多人接受答案了。
 
后退
顶部