String类型转化成PChar类型需要注意

String类型转化成PChar类型需要注意:

  如果使用了将AnsiString字符串强制转换为PChar类型的函数和过程,在使用结束后,要手工把它的长度恢复为原来以Null结束的长度。STRUTILS单元中的RealizeLenght()函数可以实现这一点:

procedure REAlizeLength(var S : String);

begin

  SetLength(S,StrLen(PChar(S)));

end;

调用ReallizeLength();

var

  S: STing;

begin

  SetLength(S,256);//重要首先给字符串分配空间

  //调用函数,S现在包含目录字符串

  GetWindowDirectory(PChar(s),256);

  RealizeLength(S);//设置S的长度为Null结束的长度;

end;

注意:在将字符串转化为PChar类型时要小心,因为字符串在超出其作用范围时有自动回收功能,因此当进行P :=PChar(Str)的赋值时,P的作用域(生存期)应当大于Str的作用域。

原文地址:https://www.cnblogs.com/beeone/p/1797946.html