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还是会自动截断的。