我的惊异:String 和 PChar 的无缝转化!

musicwind 2001-06-06 09:22:00
今天看 Borland 出的书 <Delphi5开发人员指南>
发现下面一节:

"不再需要通过调用StrPas()和StrPCopy来进行字符串与PChar之间的转换,
正如上面所提到的,可以把AnsiString强制类型转换为PChar类型。
如果把PChar的内容复制到AnsiString,直接用赋值语句:
StringVar := PCharVar; "

结果证明果然如此!
看下面的代码:

procedure TForm1.Button1Click(Sender: TObject);
var
p: PChar;
s1, s2: string;
begin
s1 := 's1';
p := Pchar( s1 );
s2 := 's2';
s2 := p;
ShowMessage( s2 );
end;

可悲的是,一直以来,我都在用StrPCopy, StrPas进行操作!

.....还要学习学习再学习!

...全文
2800 59 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
59 条回复
切换为时间正序
请发表友善的回复…
发表回复
fudelu 2001-06-14
  • 打赏
  • 举报
回复
当修改两个字符串的时候,它就会进行复制了!
Apollo47 2001-06-14
  • 打赏
  • 举报
回复
我以为是什么宝贝,原来是.... ,结束他吧。

fudelu 2001-06-14
  • 打赏
  • 举报
回复
joe_fox1025 2001-06-13
  • 打赏
  • 举报
回复
不错
BCB 2001-06-13
  • 打赏
  • 举报
回复
delphi的串真复杂
gqxs 2001-06-12
  • 打赏
  • 举报
回复
关注
lsnhit 2001-06-12
  • 打赏
  • 举报
回复
看看
spdia 2001-06-12
  • 打赏
  • 举报
回复
to Musicwind:
你说的,我没听懂,如果只增加引用计数,分别修改两个字符串不就是修改同一个内存地址,那不是冲突了吗?
musicwind 2001-06-12
  • 打赏
  • 举报
回复

28页,移植型问题
WorldCreater 2001-06-12
  • 打赏
  • 举报
回复
Musicwind:
是在哪一页上写的,我自已看看
musicwind 2001-06-11
  • 打赏
  • 举报
回复
to chenshirong(抱琴):
你写的是ShortString的存储结构,而AnsiString比这个要复杂一点:
以下摘自《Delphi5开发人员指南》:
| | | | | | | |
| 分配的大小 |引用计数 | 长度 |A|B|C|#0|
| | | | | | | |
permit 2001-06-11
  • 打赏
  • 举报
回复
可惜在C++ builder中好象必须用函数转换,呵呵
permit 2001-06-11
  • 打赏
  • 举报
回复
musicwind 2001-06-11
  • 打赏
  • 举报
回复
是呀,很多基础的知识,到现在才知道,惭愧。
BaldZhang 2001-06-11
  • 打赏
  • 举报
回复
不会吧,各位老大,

到现在才知道呀。。。
musicwind 2001-06-11
  • 打赏
  • 举报
回复
to jack32(剑):
你说的这个我试过了,这种情况下,String存储了9个字节数据,包括#0,
但是转换为pchar后,#0部分奖被截掉,这个符合我的设想。
jack32 2001-06-11
  • 打赏
  • 举报
回复
别高兴得太早,试试
s1 := 's1'#0's2';
jack32 2001-06-11
  • 打赏
  • 举报
回复
别高兴得太早,试试
s1 := 's1'#'s2';
kangpig 2001-06-11
  • 打赏
  • 举报
回复
在string[0]中动态记录了串的实际长度??
那不是最大只能到达255?
yangchengfly 2001-06-09
  • 打赏
  • 举报
回复
我同意“chenshirong(抱琴)”的看法。
加载更多回复(39)

5,927

社区成员

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

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