• 主页
  • 招聘
  • 语言基础/算法/系统设计
  • 数据库相关
  • 图形处理/多媒体
  • 网络通信/分布式开发
  • VCL组件开发及应用
  • Windows SDK/API

我的惊异: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进行操作!

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

...全文
2698 点赞 收藏 59
写回复
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(抱琴)”的看法。
回复 点赞
发动态
发帖子
Delphi
创建于2007-08-02

1463

社区成员

26.2w+

社区内容

Delphi 开发及应用
社区公告
暂无公告