delphi中pchar、char、string的定义与区别
Char是单个字符;
PChar 就是指向⼀个以Null 结尾的每个字符为⼀个字节的字符串的指针。 (可以看成是⼀个字符串)
String是字符数组,以字符#0结尾;
Char只占⼀字节的空间,⽽Pchar保存的是⼀个指针,在现在32位的系统中占有1个指针字节的⼤⼩。
type PChar=^Char;
PChar类型是⼀个指向Char的指针,并使⽤Delphi的扩展语法.它也能够作为⼀个String或者是⼀个Char数组指针来对待。
Pchar的⽤途
1.PChar最经常的使⽤⽅式就是作为⽤C或C++编写的DLL,如Windows API的⼀个参数类型.
2.可以把⼀个PChar作为⼀个Char数组指针来对待.数组下标是Integer的⼦区间,从零开始. Delphi不对该数组提供任何边界检查.通常字符串的结束⽤#0字符来表⽰.
3.通常通过与INC和DEC过程相似的加减整数来完成对PChar指针的算术运算.
字符串长度不能超过32位Pchar的转换
长字符串转换到PChar不是⾃动的。他们之间的不同点导致他们的转换存在问题。
1,长字符串是引⽤计数的,⽽PChar不是
2,赋值给长字符串是数据的拷贝,⽽PChar是指向数据的指针。
3,长字符串是空⽌符结尾,并包含有字符串的长度。⽽PChar是简单的空⽌符结尾。( 空⽌符结尾指以#0结尾)
例⼦
//举例:
var
pc: PChar;
begin
pc := 'ABCD' + #0 + 'EFGHIJKLMNOPQRSTUVWXYZ';
ShowMessage(pc); {ABCD}
end;
这个例⼦表明,Pchar可以做为⼀个以#0结尾的char字符数组
转换:
string是delphi内定义类型,pchar则是⼀个指针字符串,后缀有#0。
相互转换的话strpas(pchar);//pchar转成string
strpcopy(pchar,string);
或直接pchar(string) //string转成pchar
string ——> char的转换
//举例
procedure TForm1.Button1Click(Sender: TObject);
var
ch:array
[0..5] of char;
str:string;
i:integer;
begin
str :='123456';
move(str[1],ch,length(str));//Move说明:Move(从字符串的多少位开始移,移到⽬标,移动多少个长度或⼤⼩,注意sizeof与legth的区别)
for
i:=0 to 5 do
edit1.Text :=edit1.Text + ch[i];//show:123456
//move(str[3],ch,4);//ch=3456
end;
1、使⽤指向字符串的指针,如果不是以0结尾,运⾏时就会出现错误。为了避免这种错误,需要在字符串结尾⼈⼯加⼊0
即char(0),或⽤strpcopy函数在字符串结尾⾃动加0。
例3: ⽤strpcopy函数赋值会在字符串s结尾⾃动加0。
var
s:array of char; {s[0]=4 s[1]='n' s[2]='e' s[3]='w' s[4]=0;} {p-->'new'} p:pchar;
begin
p:=@s[1];
strpcopy(p,'new');{strpcopy函数在字符串结尾⾃动加0}
label1.caption:=strpas(p);{new}
label2.caption:=s;{new}
//label3.caption:=intTostr(integer(s[0]));{4}
end;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。