如何将String变量赋值给PChar变量

这个问题,应该是每个使用Delphi的朋友经常会遇到的疑问,针对如何将String变量赋值给Pchar变量,网上有很多种说法,如PChar、StrPas。但经过我实际试用,发现以下问题。如果你感兴趣,可以在你delphi7编译下面二段代码,看其结果有何不同?

代码1

var  p : pchar;  s : string;  i  : integer;
begin
   s := 'hello world';
   i  := length(s);
   GetMem(p,i);
try
   p := PChar(s);
finally
   FreeMem(p);  //此处会出错
end;
end;

代码2

var  p : pchar;  s : string;  i  : integer;
begin
   s := 'hello world';
   i  := length(s);
   GetMem(p,i);
try
   StrPCopy(p,s);
finally
   FreeMem(p);  //可以正确释放
end;
end;