在VS2005下編譯代碼,有時會遇到類似如下的警告: warning C4996: 'strcat' was declared deprecated. 通常這類警告都是由於調用了字符串相關函數引起的。雖然這警告無傷大雅,僅僅只是說使用的函數已過時(deprecated)<需要用新的函數來替代>,但看着實在彆扭,且看看ms爲什麼要設置成這樣。 搜索了一下ms的網站,找到了結果。ms認爲以前的c/c++庫中有一部分函數不夠安全,希望程序員可以使用他們的替代安全庫(Safe Library)來避免不必要的隱患。 整個原文請點擊以下鏈接訪問:Repel Attacks on Your Code with the Visual Studio 2005 Safe C and C++ Libraries 在網上搜索到的最常用的解決方案,那就是定義 _CRT_SECURE_NO_DEPRECATE 和 _SCL_SECURE_NO_DEPRECATE 來禁止vc2005對此產生警告(依然使用的是非安全庫!顯然並不是一個好的解決方案)。而且如果使用了ATL,則還需要定義 _ATL_SECURE_NO_DEPRECATE, 使用了MFC則需要定義 _AFX_SECURE_NO_DEPRECATE。 即使使用了_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES,代碼將依舊不夠安全, 對此,ms提出瞭如下10點建議:
———————————————————————————————————————————————— PS:定義宏_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES好像不能消除警告 |
1. gets_s()代替gets()
2.strcpy_s()來代替strcpy()
3.strncpy_s()代替strncpy()
4.sprintf_s()代替sprintf()
5.CString::Format(_T("字符轉"))代替CString::Format("字符轉")
6.strcat_s()代替strcat()
7.fopen_s()代替fopen()
8._vsnprintf_s()代替_vsnprintf()
9._ftime64_s()代替_ftime64()
10._get_tzname ()代替_tzname()
11._snwprintf_s()代替_snwprintf()
12.mbstowcs_s()代替mbstowcs()
13.wcstombs_s()代替wcstombs()
14.wcscat_s()代替wcscat()
15._wcsupr_s()代替_wcsupr()
16._wcslwr_s()代替_wcslwr()
17._wtoi()代替atoi()