安全字串處理函式
轉自:http://blog.csdn.net/zhang1chao5/article/details/7329830
緩衝區溢位錯誤(這是處理字串時的典型錯誤)已成為針對應用程式乃至作業系統的各個元件發起安全攻擊的媒介。,所以Microsoft在C執行庫中新增了很多安全函式。我們應該儘量使用這些新函式來防止應用程式在處理字串的時候發生的緩衝區溢位。
建議使用Unicode字串,而且始終應該通過新的安全字串函式來處理這些字串。
一、新的安全字串函式
C中的所有字串處理函式,都對應一個新版本的函式,前面名稱相同,但是最後新增了一個字尾 _s (代表secure)。如:
PTSTR _tcscpy (PTSTR strDestination, PCTSTR strSource ) ; //這是C執行庫現有的字串函式
errno_t _tcscpy_s(PTSTR strDestination, size_t numberOfCharacters ,PCTSTR strSource ) ;//新增安全函式
還有memcpy_s,memmove_s,wmencpy,wmemove_s等函式
這類函式檢查的專案有 1、指標不為空
2、整數在有效範圍內
3、列舉值是有效地
4、緩衝區足以容納結果資料
如果這些檢查中有一項失敗,函式就會設定區域性與執行緒的C執行時變數errno,然後返回一個errno_t值來指出成功或是失敗。然而,這些函式並不實際返回(如果有自己的處理函式是可以返回的,見上篇博文)。如果是debug build,則會呼叫 Debug Assertion Failed,然後終止應用程式(即利用斷言),如果是release build,程式自動終止。
C執行時實際允許我們自己提供處理函式。見上一篇博文
二、有更多控制力的處理函式
在Microsoft的StrSafe.h檔案中定義新的安全字串函式,除了新的安全字串函式,還新增了一些函式,用於在執行字串處理時提供更多的控制。可以控制填充符,或者指定如何進行截斷
下面為部分原型:常用的
HRESULT StringCchCat( PTSTR pszDest, size_t cchDest, PCTSTR pszSrc) ;
HRESULT StringCchCatEx( PTSTR pszDest, size_t cchDest, PCTSTR pszSrc,
PTSTR*ppszDestEnd, size_t *pcchRemaining, DWORD dwFlags );
還有 StringCchCpy
StringCchCpyEx
StringCchPrintf
StringCchPrintfEx等
可以看出 含有“Cch”,這表示count of characters即字元數,通常用_countof巨集來獲取。
還有含有“Cb”,如StringCbCat(Ex),StringCbCopy(Ex),StringCbPrintf(Ex) 這些函式指定的是位元組數(轉者注:count of bytes),
通常使用sizeof操作符來獲取此值
這些函式都返回HRESULT不同於安全函式(帶_S字尾的),當緩衝區太小的時候,這些函式會執行截斷
詳情請見MSDN
三、windows字串函式
windows也提供了各種字串處理函式。
例如我們經常比較字串以進行相等性測試或是排序,為此,最理想的函式是
CompareString(Ex)和 CompareStringOrdinal
第一個函式功能大用法比較複雜,對於這兩個函式的用法,請見MSDN
注:只支援unicode
相關文章
- SqlServer——字串處理函式SQLServer字串函式
- oracle函式大全-字串處理函式Oracle函式字串
- php字串處理函式大全PHP字串函式
- SQL字串處理函式大全SQL字串函式
- SQL Server字串處理函式大全SQLServer字串函式
- C語言之字串處理函式C語言字串函式
- c語言字串處理函式大全C語言字串函式
- python字串處理函式大總結Python字串函式
- SQL中的常用的字串處理函式大全SQL字串函式
- 002——php字串中的處理函式(一)PHP字串函式
- 處理PHP中字串的常用操作及函式PHP字串函式
- escape函式處理帶加號字串問題函式字串
- 磁碟處理函式函式
- 字元處理函式字元函式
- C++常用字串處理函式及使用示例(轉)C++字串函式
- 陣列處理函式陣列函式
- Oracle函式-->字元處理Oracle函式字元
- 檔案處理函式函式
- 時間處理函式函式
- C++ 字串 cctype 標頭檔案標準庫處理函式C++字串函式
- PHP函式處理函式例項詳解PHP函式
- 單位元組處理函式函式
- 登錄檔處理函式函式
- 【分享】Delphi的內部字串處理函式/過程不完全列表字串函式
- 字串處理字串
- mongoDB中聚合函式java處理MongoDB函式Java
- Sanic 處理函式修飾器函式
- JavaScript 註冊事件處理函式JavaScript事件函式
- Mysql字元處理函式詳解MySql字元函式
- 處理中英文的函式函式
- 幾個SQL 日期處理函式SQL函式
- Windows函式錯誤處理 (轉)Windows函式
- C#圖片處理函式C#函式
- 字串函式之Strtok()函式字串函式
- awk 字串處理字串
- abap 字串處理字串
- Flink處理函式實戰之四:視窗處理函式
- python函式每日一講 - divmod數字處理函式Python函式