发信人: wpf (Itouchthebluesky), 信区: BorlandDev
标 题: string 与pchar的区别
发信站: 哈工大紫丁香 (2001年06月08日12:36:05 星期五), 站内信件
发信人: ffan (舟~扬帆~远航), 信区: Delphi
标 题: Re: 请教:string和pchar有什么区别啊?
发信站: BBS 水木清华站 (Fri Jun 8 12:26:00 2001)
Delphi的32位版本引进了对长字符串的支持,具体说有三种:
1. ShortString: 有255个字符的限制,每一个字符都是标准的ANSIChar。
2. ANSIString: 变长度的长字符串,可动态分配存储,引用计数,大小几乎
没有限制。每一个字符也是标准的ANSIChar。
3. WideString: 类似2,但每一个字符为Unicode,主要由OLE使用。
需要说明的是,String中包含了长度和引用计数的信息。
而PChar可以理解成一个指针,指向以空字符结尾的一个字符数组。
由于String是空终止的,因此它与PChar完全兼容,可以直接强制类型转换,如:
Str := String(pStr);
pStr := PChar(Str);
关于这两种类型的使用,有一些需要注意的地方,如:
var
S: String;
begin
GetWindowText(Handle, PChar(S), Length(S));
...
这段代码是有问题的,因为你需要先设置S的长度:SetLength(S, 20)
另外,由于空终止的缘故,上面的代码执行后,直接 S := S + 'aa';
后,S的输出其实是没有变的。道理很简单,GetWindowText这个API没有适当
的设置S的长度,因此Delphi在输出的时候实际上是寻找空终止符来实现的。
解决办法也很简单,直接转换一下:S := String(PChar(S)); 或者直接设置
其长度: SetLength(S, StrLen(PChar(S))); 。
然后就可以正常操作S了。
【 在 soilder (马拉多纳的忠实崇拜者) 的大作中提到: 】
: 刚开始学,不太清楚,那位置点一下
--
Whatever, just do it!
--
据说呆娃儿不笨
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.245.166]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.576毫秒