pchar在什么时候用(10分)

  • 主题发起人 主题发起人 hksoobe
  • 开始时间 开始时间
H

hksoobe

Unregistered / Unconfirmed
GUEST, unregistred user!
我在Delphi编程的时候有时就不知道Pchar什么时候用,有的时候报错了,我凭感觉用上这个就可以了。听有的人说pchar和string差不多,我是这么理解的不知道对不对,string就指的是一个字符串,而Pchar指的是一个字符串的开头字母所以可以这么想,不知道我的理解是否正解,请懂的帮忙解释一下,谢谢了!
 
pchar 和string差别很大的。
就个人见解给你讲一下,欢迎其他大虾补充

string(默认为长字符串)是一种内存自管理,且使用引用计数和“写复制”的字符串。
在一般程序内,可以随意使用string,其内存会自动管理,效率较高。
但跨内存管理器时,比如主程序和dll之间,如果没有加内存共享单元,那么是不能互相传递string参数的,因为在一个内存管理器比如主程序内,释放了一个string,那么内存管理器发现其引用计数为零,就释放了所占的内存,那么dll内由于是处于另一个内存管理器当中,不能发现内存被释放,那么当用到这个string的时候就会引起内存访问错误。

string使用虽然方便,但由于其需要额外的内存开销,有些场合(比如频繁修改字符串)还不如ShortString(短字符串,最多允许255个字符)效率高。

pchar是windows默认支付串类型,表示一个用#0结尾的字符串,pchar其实是一个指针,指向的是第一个字符的地址。用于和dll交互时可使用pchar
pchar不使用引用计数和写复制,也不保存字符串长度信息。结构简单,就是一个指针指向一块#0结尾的内存

string看起来也是一个指针,指向字符串的第一个字符,但在第一个字符的前面(-8)还有8个字节用于记录字符串长度和引用计数,string最后还会被自动添加#0符号用于和pchar兼容。
由于string保存有字符串长度信息,所以,中途允许有#0存在而不会被截断,但在强制转换为pchar时,遇到#0还是会自动截断的。
 
后退
顶部