1. 程式人生 > >各字串長度函式的區別和比較

各字串長度函式的區別和比較

            程式設計過程中,我們需要用到函式用來處理我們的字串長度。但是,隨著計算機位數的不斷擴充套件,之前的很多函式對於計算字串長度的功能也已經適用範圍有限。所以,出現了很多的新的函式用來應對不同使用環境下的字串處理。現在,我們把幾個常見的並且容易混淆的字串長度處理函式進行區分和甄別。

        先說最常見的函式,strlen函式,主要功能是用作計算字串的長度,不包含\0。但是strlen會將字串當做char型別來處理計算,而我們有的字串型別為w_char,則該函式不適用。

        為了應對w_char這種型別的字元,所以,產生了wcslen這個函式,功能與strlen完全一樣,只是處理的字元型別為w_char。

        strnlen函式,功能也是計算字串中的字元個數,雖然功能上於strlen很類似,但是該函式的設計初衷是用於計算一些輸入性大小未知的資料來源,例如網路接收到的資料包。如果該字串超過預定的大小,則該函式仍然返回預定的長度值,而非真實的字串長度值。同事,該函式會將所有的字串當single_byte的方式計算,如果含有w_char,則該函式的計算結果就會有誤。strnlen_s和strnlen的功能差不多,不過是多了一個安全檢查。

        wcsnlen和wcsnlen_s則是這個函式對應的w_char版本。同理,其他的字串處理函式,如果以w開頭的話,一般也都是用來處理w_char版本。

        而一般帶有_m開頭的,則是這些函式的mbcs編碼版本,例如_mbslen,_mbslen_l等等,都是這些函式對應於mbcs編碼版本所做的對應介面。mbcs編碼是指什麼呢?值得就是擴充套件之後的ASCII編碼,muilti-bytes charecter set。

       需要特殊說明的一點,

在msdn中也進行了強調,有很多的CRT函式在windows平臺中已經不支援了,所謂的CRT函式就是指C RunTime函式,這些函式由於較為過時,有些能夠支援,有些已經不支援了。例如_mbslen,_mbslen_l在windows的平臺的應用中,就已經被禁止使用了。

    當然,這種規則不僅僅在字串長度計算中使用,在其他的字元處理函式中也通用。