PChar为何物

djiang 2001-06-05 06:19:00
设窗口标题为'Form', 有如下代码:

var s:PChar;
begin
GetWindowText(Handle,s,100);
ShowMessage(s);
end;
可以显示正确的窗口标题。

但如下代码:
var s:PChar;
begin
s:=PChar('Hello');
GetWindowText(Handle,s,100);
ShowMessage(s);
end;
显示的s却是'Hello',Why?

另,请问PChar和Char有什么区别和联系?
...全文
110 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
happy3001 2001-06-07
  • 打赏
  • 举报
回复
长见识!!!!!!!!!!!!!!!!!!!!!!1
airhorse 2001-06-07
  • 打赏
  • 举报
回复
'hello'
'aaaaa'

是系统编译是生成的固定不变的。

s:=PChar('Hello');

s:=PChar('aaaaa');

只是 s从'Hello'的地址指到了‘aaaaa’


djiang 2001-06-07
  • 打赏
  • 举报
回复
to airhorse(编程至尊宝) :
var s:PChar;
begin
s:=PChar('Hello');
s:=PChar('aaaaa');
ShowMessage(s); -->显示为aaaaa,

按你的说法,s应该是Hello呀?

请再指教!
weenyboy 2001-06-05
  • 打赏
  • 举报
回复
pchar默认是不分配内存的,所以你的第一种用法是错误的,能够返回正确的结果是因为该指针指向一个不被使用的堆空间,但是不能保证所有情况下的正确
airhorse 2001-06-05
  • 打赏
  • 举报
回复
上面错了
上面错了
上面错了


这是delphi对字符串操作的一个封装,

在delphi里:pchar('Hello'),相当于一个常量,具有不可更改性;
s:= pchar('Hello');
d:= pchar('Hello');
~~~~~~~~
showmessage(IntTostr(Integer(s)));
showmessage(IntTostr(Integer(d)));

两个值(即地址)是一样的。

var s:PChar;
begin
s:=PChar('Hello');
GetWindowText(Handle,s,100); //你给一个相当于常量赋值,实效,s的地址不变。
ShowMessage(s);
end;
显示的s却是'Hello',Why?



var s:PChar;
begin
GetWindowText(Handle,s,100);//因为s没有初石化,此时delphi自动分配了内存空间,有效
ShowMessage(s);
end;



airhorse 2001-06-05
  • 打赏
  • 举报
回复
这是delphi对字符串操作的一个封装,

在delphi里:pchar('Hello'),相当于一个常量,具有不可更改性;
s:= pchar('Hello');
d:=pchar('');

showmessage(IntTostr(Integer(s)));
showmessage(IntTostr(Integer(d)));

两个值(即地址)是一样的。

var s:PChar;
begin
s:=PChar('Hello');
GetWindowText(Handle,s,100); //你给一个相当于常量赋值,实效,s的地址不变。
ShowMessage(s);
end;
显示的s却是'Hello',Why?



var s:PChar;
begin
GetWindowText(Handle,s,100);//因为s没有初石化,此时delphi自动分配了内存空间,有效
ShowMessage(s);
end;

djiang 2001-06-05
  • 打赏
  • 举报
回复
to apple1978:

你这段程序如果改成这样,还会出现内存错误,为什么?
Getmem(s,<length>)
s:=PChar('Hello'); <<< add
GetWindowText(Handle,s,100);
ShowMessage(s);
freemem(s);
apple1978 2001-06-05
  • 打赏
  • 举报
回复
Getmem(s,<length>)
GetWindowText(Handle,s,100);
ShowMessage(s);
freemem(s);

Try it!! It is right!!
djiang 2001-06-05
  • 打赏
  • 举报
回复
上面的代码是怎么回事,大家帮忙看看!
Muf 2001-06-05
  • 打赏
  • 举报
回复
PChar 定义为 指向 Char数组的指针。
PChar= ^ Array[0..0] of char;
comsun 2001-06-05
  • 打赏
  • 举报
回复
PChar 指向一个字符串,用PChar 在很多场合可以当作String用的,而char是一个字符,PChar^ 可以引用PChar 所指的第一个字符。
Muf 2001-06-05
  • 打赏
  • 举报
回复
你写错了吧?
sean717 2001-06-05
  • 打赏
  • 举报
回复
pchar是指针

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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