不好意思,问个很基础的问题,我一直没用过,pchar怎么用?

donil 2017-08-25 02:24:22

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;


这个代码为什么freemem就报错?如果我为pchar变量申请了内存,要怎样才能写内容进去?好像不用getmem也能直接用,就好像c1那样,用move把c1的内容复制到c,为什么freemem就报错了?
...全文
414 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
donil 2017-08-26
  • 打赏
  • 举报
回复
pchar,是不是只能用move,strcopy之类的函数操作?如果有个pchar,长度是10,我想改第5个字符,该怎么写?
donil 2017-08-26
  • 打赏
  • 举报
回复
引用 1 楼 wdonghai 的回复:

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;
谢谢,请问下,Move(c1,c,4);为啥报错?
npkaida 2017-08-26
  • 打赏
  • 举报
回复
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;
donil 2017-08-26
  • 打赏
  • 举报
回复
我知道了 1、Move(c1,c,4);导致freemem报错,是因为move是把c1的地址给了c,之后再freemem,就报错了。 2、以下代码可以修改pchar的内容:

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做移动指针的操作,就可以了。
wdonghai 2017-08-25
  • 打赏
  • 举报
回复

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;

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧