|
只是淺淺的解析下,讓大家可以快速的理解字符串。 其中的所有代碼均在Delphi7下測(cè)試通過(guò)。 Delphi 4,5,6,7中有字符串類(lèi)型包括了:
1、短字符串(Short String) 固定長(zhǎng)度,最大字符數(shù)個(gè)數(shù)為255,短字符串也成為長(zhǎng)度字節(jié)(Length-byte)字符串,這時(shí)因?yàn)槎套址牡?個(gè)元素包含了這個(gè)字符串的長(zhǎng)度(字符串中字符的個(gè)數(shù))。因此ShortString的缺省最大長(zhǎng)度為256個(gè)字節(jié)(255個(gè)字符+1個(gè)長(zhǎng)度字節(jié)=256),聲明一個(gè)短字符串有兩種方式,如下:
以上例子通過(guò)S[0]可以獲得S的字符串長(zhǎng)度,當(dāng)然也可以用Length函數(shù)來(lái)確定一個(gè)短字符串的長(zhǎng)度。 可以通過(guò)數(shù)組的下標(biāo)來(lái)訪(fǎng)問(wèn)ShortString中的一個(gè)特定位置的字符,具體使用參看下面例子和注釋說(shuō)明:
2、長(zhǎng)字符串(Long String) 長(zhǎng)字符串 (AnsiString)是一種動(dòng)態(tài)分配的字符串,其大小只受可用內(nèi)存的限制。聲明一個(gè)長(zhǎng)字符串,只需要用關(guān)鍵字String不加大小參數(shù)即可。 在Delphi 7中AnsiString包含的字符是用單字節(jié)存儲(chǔ)的。
由于是動(dòng)態(tài)分配的,一次可以隨意修改字符串,而不用擔(dān)心對(duì)其他的影響,也不用擔(dān)心越界的問(wèn)題。String類(lèi)型沒(méi)有0元素,試圖存取String類(lèi)型的0元素會(huì)產(chǎn)生一個(gè)編譯錯(cuò)誤。 通過(guò)Length函數(shù)也可以獲得長(zhǎng)字符串的長(zhǎng)度,也可以通過(guò)SetLength過(guò)程為長(zhǎng)字符串設(shè)置長(zhǎng)度。其在內(nèi)存中分配情況如下: 3、寬字符串(Wide String) 寬字符串和長(zhǎng)字符串一樣,大小只受有效內(nèi)存的限制,并實(shí)行動(dòng)態(tài)分配。 在Delphi 7 中WideString被實(shí)現(xiàn)為2個(gè)字節(jié)存儲(chǔ)一個(gè)字符,用WideString來(lái)處理多字節(jié)字符是十分方便的。如:
4、零結(jié)尾字符串(Null-Terminated String)、PChar和字符數(shù)組 在C和C++中沒(méi)有真正的字符串?dāng)?shù)據(jù)類(lèi)型,都是通過(guò)以Null結(jié)尾(0)的字符數(shù)組來(lái)實(shí)現(xiàn)的,字符數(shù)組沒(méi)有長(zhǎng)度字節(jié),因此只能通過(guò)結(jié)尾的Null標(biāo)志來(lái)作為字符串的字符結(jié)束標(biāo)志。又因?yàn)閃indows是用C編寫(xiě)的,很多Windows函數(shù)要用到以字符數(shù)組作為參數(shù),但Pascal字符串類(lèi)型不是字符數(shù)組,因?yàn)闉榱俗孭ascal字符串也能與Windows兼容,就需要一個(gè)字符串?dāng)?shù)組,PChar類(lèi)型正是符合這種需求,在任何需要字符數(shù)組的地方都可用PChar。 雖然AnsiString和WideString都已經(jīng)實(shí)現(xiàn)了NULL 相應(yīng)的也有PAnsiChar和PWideChar,分別對(duì)應(yīng)于AnsiChar字符和WideChar字符。 例如:Windows MessageBox函數(shù),此函數(shù)聲明如下:
第二個(gè)和第三個(gè)參數(shù)需要一個(gè)指向字符數(shù)組的指針,為了可以調(diào)用此函數(shù),有以下三種方法來(lái)實(shí)現(xiàn) 1、PChar()類(lèi)型轉(zhuǎn)換
其中 2、PChar變量 我們先做一個(gè)實(shí)現(xiàn),看看PChar類(lèi)型到底是啥呢? 運(yùn)行下面程序:
通過(guò)上面的程序,我們知道Text只不過(guò)是一個(gè)指針而已。
指針Text指向了這樣一個(gè)內(nèi)存區(qū)域,一個(gè)包含Null的結(jié)尾的’This is a test’字符串的區(qū)域。其等同于下面的代碼:
3、Char類(lèi)型字符數(shù)組 最有還可以用Char數(shù)組來(lái)代替PChar,代碼如下:
顯示結(jié)果如下: 關(guān)于字符串就先淺淺的談到這個(gè),以后再深入了解。 |
|
|