三、字符串string 字符數組與指向字符串的指針pchar的區別與聯系
這3者的基本概念相同,但有一些非常細微的差別,在編程時稍不注意就會出錯,需高度重視。
1、使用指向字符串的指針,如果不是以0結尾,運行時就會出現錯誤。為了避免這種錯誤,需要在字符串結尾人工加入0 即char(0),或用strpcopy函數在字符串結尾自動加0。
例1: 指向字符串的指針,如果不是以0結尾,運行時會出現錯誤:
{s[0]=3 s[1]='n' s[2]='e' s[3]='w'}
var
s:string;
p:pchar;
begin
s:='new';
label1.caption:=s; {new}
label2.caption:=intTostr(integer(s[0]));{3是字符串的長度}
p:=@s[1];{不是以0結尾,莫用pchar型指針}
label3.caption:=strpas(p); {運行時出現錯誤}
end;
例2:在字符串結尾人工加入0即char(0),可使用指向字符串的指針。
{s[0]=4 s[1]='n' s[2]='e' s[3]='w' s[4]=0;}
{p-->'new'}
var
s:string;
p:pchar;
begin
p:=@s[1];
s:='new'+char(0); {以0結尾,可用pchar型指針}
label1.caption:=strpas(p); {new}
label2.caption:=s; {new}
label3.caption:=intTostr(integer(s[0])); {4是字符串長度 end;
例3: 用strpcopy函數賦值會在字符串s結尾自動加0。
{s[0]=4 s[1]='n' s[2]='e' s[3]='w' s[4]=0;}
{p-->'new'}
var
s:string;
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;