读书人

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

发布时间: 2012-02-13 17:20:26 作者: rapoo

使用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);

读书人网 >.NET

热点推荐