发信人: 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毫秒