有点胡涂了.关于 指针类型.(50分)

  • 主题发起人 主题发起人 xwings
  • 开始时间 开始时间
X

xwings

Unregistered / Unconfirmed
GUEST, unregistred user!
大家请看下面的代码片断 不知为什么pointer转换成Pchar赋值之后,地址就发生变化了.
我不太懂了. 请高手指点一下.
var
p1:Pointer;
a1:Integer;
begin
p1:=AllocMem(10);
FillChar(p1^,9,$42);
PChar(p1):='12345678'
//这句如果执行的话, freemem就会异常.地址就发生变化了.
ShowMessage(PChar(p1)+#13+Format('Address is %p',[p1]));
freemem(p1);
 
那当然,你给指针重新赋值了。你的代码应该这样写
s : array[0..255] of char;

s := '12345678';
move(s, p1^, length(s));

 
你改成下面的就可以了
var
p1:Pointer;
a1:Integer;
begin
p1:=AllocMem(10);
FillChar(p1^,9,$42);
strpcopy(pchar(p1),'12345678')
//应用这名话
// PChar(p1):='12345678'
// 这名话是让p1 重新指向 字符串 '12345678' 的首地址
ShowMessage(PChar(p1)+#13+Format('Address is %p',[p1]));
freemem(p1);


end;
 
我去试试~
 
to: chshanghai
谢谢指点. 不过有个地方还是不明白:
你是说.
// PChar(p1):='12345678'
// 这名话是让p1 重新指向 字符串 '12345678' 的首地址
那么这个"Pchar"如何释放 ?
是不是pchar不能这样赋值啊. 只能用strcopy ? 我不记得了.
 
哦. 我懂. pchar(p1) ='' 实际上是地址指向了字符常量了. 呵呵. 抱歉各位.

另外我想问问有没有 ansi string <--> wide string 函数
pchar <--> pwidechar 函数?

谢谢.
 
>>另外我想问问有没有 ansi string <--> wide string 函数
>> pchar <--> pwidechar 函数?
一个StringToWideChar就全解决了。
 
多人接受答案了。
 
后退
顶部