16,748
社区成员
发帖
与我相关
我的任务
分享
procedure TForm2.Button10Click(Sender: TObject);
var
c,c1: PChar;
begin
GetMem(c, 5);
c1 := '11.2';
Move(c1,c,4);
ShowMessage(c);
FreeMem(c);
end;
procedure TForm1.btn1Click(Sender: TObject);
var
c,c1: PChar;
begin
GetMem(c,5);
//FillChar(c^,5,#0);
c1:='11.2';
Move(c1^,c^,4);
c[4]:=#0;
ShowMessage(c); //11.2
c[0]:='2';
c[3]:='5';
ShowMessage(c);//21.5
FreeMem(c);
end;
procedure TForm2.Button10Click(Sender: TObject);
var
c,c1: PChar;
begin
GetMem(c, 5);
c1 := c;
c1^ := '1';
Inc(c1);
c1^ := '3';
Inc(c1);
c1^ := '5';
ShowMessage(c);
FreeMem(c);
end;
pchar其实可以理解为^char,指向字符的指针(反正指针都一样,就是个保存地址的整型,无论指向什么类型,类型是为了方便编码而弄出来的概念——我的理解),getmem给pchar分配内存,其实就是给了pchar一个地址,并分配了一段连续的内存空间,pchar本身还就是一个整型的地址,如果inc(c),就会导致c指向原地址的下一个内存的地址,其实也是可以写入,但是最后到释放内存时,就会报错了,因为c的地址不是原来分配的地址了,释放就释放到别人的内存里去了,所以,用c1替代c做移动指针的操作,就可以了。
http://blog.csdn.net/tjb_1216/article/details/4627346
procedure TForm1.Button1Click(Sender: TObject);
var
c,c1: PChar;
begin
GetMem(c,5);
FillChar(c^,5,#0);
c1:='11.2';
Move(c1^,c^,4);
ShowMessage(c);
FreeMem(c);
end;