使用CopyMemory拷贝字符串的有关问题

使用CopyMemory拷贝字符串的问题
procedure TForm1.Button1Click(Sender: TObject);
var
  s1,s2:string;
  p:Pchar;
begin
  s1:=Trim(edit1.Text);
  GetMem(p,length(s1)+1);
  CopyMemory(p,Pchar(s1),length(s1));
  //StrCopy(p,Pchar(s1));

  s2:=strpas(p);
  showmessage(s2);
  freemem(p);
end;

当我使用CopyMemory拷贝的时候,有的时候能够正确拷贝,有的时候不可以。
大家可以在Edit1中输入 1
  12
  123
  1234
  .....
这样子测试,有的时候输入1可以,有的时候不可以!
用StrCopy好像都可以

想问一下,是不是CopyMemory不能用于这种拷贝呀

------解决方案--------------------
PChar类型表示的字符串是以空字符结尾的,StrCopy会先找到源字串的最后一个空字节,最后把空字节也拷贝进去,而你用CopyMemory只拷贝了字符的个数,并没有把最后一个空字节也拷贝进去,你只要多加一个字节的长度就可以了,CopyMemory(p,Pchar(s1),length(s1)+1);这样就行了。
------解决方案--------------------
CopyMemory(p,Pchar(s1),length(s1)+1); +1
------解决方案--------------------
CopyMemory(p,Pchar(s1),length(s1)+1);