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