L lordofbinladen Unregistered / Unconfirmed GUEST, unregistred user! 2005-02-01 #1 pchar -&gt string ?
L lordofbinladen Unregistered / Unconfirmed GUEST, unregistred user! 2005-02-01 #2 pchar -&gt string ?
Y yf_zq Unregistered / Unconfirmed GUEST, unregistred user! 2005-02-01 #5 var p1char; s1:string; begin P1:=StrAlloc(64*SizeOf(char)); StrPCopy(p1,'Delphi 7.0'); s1:=StrPas(p1); StrDispose(p1); end;
var p1char; s1:string; begin P1:=StrAlloc(64*SizeOf(char)); StrPCopy(p1,'Delphi 7.0'); s1:=StrPas(p1); StrDispose(p1); end;
A abookdog Unregistered / Unconfirmed GUEST, unregistred user! 2005-02-02 #6 pchar -&gt string ? 直接赋值
C cdcdname Unregistered / Unconfirmed GUEST, unregistred user! 2005-02-05 #7 首先,要清楚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; p1Char; begin s1:='1234'; p1:=PChar(s1); end; 而PChar到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; p1Char; begin s1:='1234'; p1:=PChar(s1); end; 而PChar到string的转换就没这么简单了.
C cdcdname Unregistered / Unconfirmed GUEST, unregistred user! 2005-02-05 #8 string的引用计数跟串长等都是由编译器维护的,所以转换反而简单,因为很多工作borland 帮你做了. var p1Char; s1:string; begin ... s1:=p1 //直接赋值即可. ... end;
string的引用计数跟串长等都是由编译器维护的,所以转换反而简单,因为很多工作borland 帮你做了. var p1Char; s1:string; begin ... s1:=p1 //直接赋值即可. ... end;