关于Delphi中的字符串的详细分析
只是淺淺的解析下,讓大家可以快速的理解字符串。
其中的所有代碼均在Delphi7下測試通過。
Delphi 4,5,6,7中有字符串類型包括了:
- 短字符串(Short String)
- 長字符串(Long String)
- 寬字符串(Wide String)
- 零結(jié)尾字符串(Null-Terminated String)、PChar和字符數(shù)組
1、短字符串(Short String)
固 定長度,最大字符數(shù)個數(shù)為255,短字符串也成為長度字節(jié)(Length-byte)字符串,這時因為短字符串的第0個元素包含了這個字符串的長度(字符 串中字符的個數(shù))。因此ShortString的缺省最大長度為256個字節(jié)(255個字符+1個長度字節(jié)=256),聲明一個短字符串有兩種方式,如 下:
以上例子通過S[0]可以獲得S的字符串長度,當(dāng)然也可以用Length函數(shù)來確定一個短字符串的長度。
可以通過數(shù)組的下標(biāo)來訪問ShortString中的一個特定位置的字符,具體使用參看下面例子和注釋說明:
2、長字符串(Long String)
長字符串 (AnsiString)是一種動態(tài)分配的字符串,其大小只受可用內(nèi)存的限制。聲明一個長字符串,只需要用關(guān)鍵字String不加大小參數(shù)即可。
在Delphi 7中AnsiString包含的字符是用單字節(jié)存儲的。
由于是動態(tài)分配的,一次可以隨意修改字符串,而不用擔(dān)心對其他的影響,也不用擔(dān)心越界的問題。String類型沒有0元素,試圖存取String類型的0元素會產(chǎn)生一個編譯錯誤。
通過Length函數(shù)也可以獲得長字符串的長度,也可以通過SetLength過程為長字符串設(shè)置長度。其在內(nèi)存中分配情況如下:
?
3、寬字符串(Wide String)
寬字符串和長字符串一樣,大小只受有效內(nèi)存的限制,并實行動態(tài)分配。
在Delphi 7 中WideString被實現(xiàn)為2個字節(jié)存儲一個字符,用WideString來處理多字節(jié)字符是十分方便的。如:
4、零結(jié)尾字符串(Null-Terminated String)、PChar和字符數(shù)組
在C和C++中沒有真正的字符串?dāng)?shù)據(jù)類型,都是通過以Null結(jié)尾(0)的字符數(shù)組來實現(xiàn)的,字符數(shù)組沒有長度字節(jié),因此只能通過結(jié)尾的Null標(biāo) 志來作為字符串的字符結(jié)束標(biāo)志。又因為Windows是用C編寫的,很多Windows函數(shù)要用到以字符數(shù)組作為參數(shù),但Pascal字符串類型不是字符 數(shù)組,因為為了讓Pascal字符串也能與Windows兼容,就需要一個字符串?dāng)?shù)組,PChar類型正是符合這種需求,在任何需要字符數(shù)組的地方都可用 PChar。
雖然AnsiString和WideString都已經(jīng)實現(xiàn)了NULL
相應(yīng)的也有PAnsiChar和PWideChar,分別對應(yīng)于AnsiChar字符和WideChar字符。
例如:Windows MessageBox函數(shù),此函數(shù)聲明如下:
第二個和第三個參數(shù)需要一個指向字符數(shù)組的指針,為了可以調(diào)用此函數(shù),有以下三種方法來實現(xiàn)
1、PChar()類型轉(zhuǎn)換
其中
2、PChar變量
我們先做一個實現(xiàn),看看PChar類型到底是啥呢?
運行下面程序
通過上面的程序,我們知道Text只不過是一個指針而已。
指針Text指向了這樣一個內(nèi)存區(qū)域,一個包含Null的結(jié)尾的’This is a test’字符串的區(qū)域。其等同于下面的代碼:
3、Char類型字符數(shù)組
最有還可以用Char數(shù)組來代替PChar,代碼如下:
顯示結(jié)果如下:
??
關(guān)于字符串就先淺淺的談到這個,以后再深入了解。
轉(zhuǎn)載于:https://www.cnblogs.com/bjxsky/articles/2817643.html
總結(jié)
以上是生活随笔為你收集整理的关于Delphi中的字符串的详细分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Django整理(二) - 视图和模板的
- 下一篇: SQL SERVER-日期按时区转换