Delphi 的字符及字符串 string、AnsiString、WideString、String[n]、ShortString
阿新 • • 發佈:2017-08-02
ssa 寬字符串 set setlength 內存 如果 指定大小 spa 字符
//最常用的 string var str: string; {定義} begin str := ‘萬一‘; {賦值} ShowMessage(IntToStr(Length(str))); {長度是: 4} end;
//長字符串 AnsiString; 在當前版本(2007)中的默認狀態下, String 就是 AnsiString var str: AnsiString; begin str := ‘萬一‘; ShowMessage(IntToStr(Length(str))); {長度是: 4} end;
//寬字符串 WideString (效率不及 AnsiString)var str: WideString; begin str := ‘萬一‘; ShowMessage(IntToStr(Length(str))); {長度是: 2} end;
//定長字符串 var str1: String[6]; {指定大小不能超過 255} str2: String[100]; begin {少給了也會占那些內存} str1 := ‘萬一‘; ShowMessage(str1); {萬一} ShowMessage(IntToStr(Length(str1))); {4; 這是字符串的長度} ShowMessage(IntToStr(SizeOf(str1))); {7; 這是占內存大小}{多給了會被截斷} str1 := ‘萬一的 Delphi 博客‘; ShowMessage(str1); {萬一的} ShowMessage(IntToStr(Length(str1))); {6; 這是實際保存的字符串長度} ShowMessage(IntToStr(SizeOf(str1))); {7; 這是占內存大小} {問題: 不是聲明大小為 6 嗎? 怎麽 SizeOf 是 7 ? } {因為定長字符串會多出一個首字節來記憶字符串的實際長度} {舉例說明, 如果給 str2 按如下賦值, 那它的首字節(str2[0])肯定儲存著字符 ‘A‘}str2 := ‘iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii‘; {65個} ShowMessage(str2[0]); {A} ShowMessage(IntToStr(Ord(str2[0]))); {65; 這是 ‘A‘ 在 ASCII 序列中的序號, 用的就是它} {那以後可以用 Ord(str2[0]) 來代替 Length 判斷字符串的長度嗎? } {對定長字符串是可以的; 不但能讀取, 還可以像 SetLength 一樣設置} end;
//ShortString; 它相當於 String[255] var str: ShortString; begin str := ‘萬一的 Delphi 博客‘; ShowMessage(str); {萬一的 Delphi 博客} ShowMessage(IntToStr(SizeOf(str))); {256; 這是大小} ShowMessage(IntToStr(Length(str))); {18 ; 這是實際長度} ShowMessage(IntToStr(Ord(str[0]))); {18 ; 這是從首字節中取出的長度} end;
Delphi 的字符及字符串 string、AnsiString、WideString、String[n]、ShortString