安全字符串處理函數


0.計數類

_tcslen:決不能對已分配字符串空間而未初始化的字符串指針使用_tcslen。如:

TCHAR *psz = new TCHAR[10];

assert(_tcslen(psz) == 10);//錯誤!結果未知!

sizeof:對指針和數組的sizeof結果是不同的.

比如 char sz[]=”hello”;則sizeof(sz) == 6;

而char *psz = new char[100];則sizeof(psz) == 4,也就是一個指針的大小.

但是當數組作為參數傳遞時,將退化為同類型的指針:

void Func(char sz[100])

{

assert(sizeof(sz)==4);

}

_countof:這是一個計數字符的宏.只適用於靜態分配的數組(statically-allocated array).如果作用於指針,C 將會產生錯誤結果;C++ 將不能通過編譯.

1. 復制、連接類

_tcsncpy_s:

第一個參數:TCHAR *strDest, 目標緩存地址. 第二個參數:size_t numberOfElements,目標緩存所能容納的字符數.對於char類型緩存,它容納的字符數等同於它的字節數,即:sizeof(buf) == _countof(buf).對於wchar_t類型的緩存,此處應使用_countof進行計數.因為此時sizeof(buf) == 2*_countof(buf). 第三個參數:const char *strSource,源字符串地址 第四個參數:size_t count, 准備從源字符串復制多少個字符到目標緩存.必須保證目標緩存剩余一個字符空間來容納null,否則此函數調用失敗.當此參數為_TRUNCATE時,將復制盡可能多的字符到目標緩存,同時保留一個字符給null.若截斷,返回值為 STRUNCATE .參考:

http://msdn.microsoft.com/en-us/library/ms175769.aspx
 
        

_tcsncat_s:

2.格式化類

_sntprintf_s:對目標緩存計數以 bytes(對char) 和 words(對wchar_T)為單位.統一用 _countof 計數最好.

_vsntprintf_s:使用va_list動態格式化字符串的類.

3.字符串轉換類

wcstombs_s:我草2碼B。注意此函數對目標緩存的計數以 bytes 為單位.

mbstowcs_s:碼B2我草。此函數對目標緩存的計數以 words 為單位.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM