warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead.

使用VS2005以上版本(VS2005、VS2008、VS2010)編譯在其他編譯器下正常通過的C語言程序,你可能會遇到類似如下的警告提示:
 引用內容
warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>          c:/program files/microsoft visual studio 10.0/vc/include/string.h(105) : 參見“strcpy”的聲明
warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>          c:/program files/microsoft visual studio 10.0/vc/include/stdio.h(234) : 參見“fopen”的聲明
原因解釋
這種微軟的警告,主要因爲那些C庫的函數,很多函數內部是不進行參數檢測的(包括越界類的),微軟擔心使用這些會造成內存異常,所以就改寫了同樣功能的函數,改寫了的函數進行了參數的檢測,使用這些新的函數會更安全和便捷。關於這些改寫的函數你不用專門去記憶,因爲編譯器對於每個函數在給出警告時,都會告訴你相應的安全函數,查看警告信息就可以獲知,在使用時也再查看一下MSDN詳細瞭解。庫函數改寫例子:
mkdir改寫爲 _mkdir 
fopen”改寫爲 fopen_s 
stricmp改寫爲 stricmp_s
strcpy改寫爲strcpy_s
    解決方案:
1> 根據下面的warning提示:參見“fopen”的聲明
        消息:“This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.”
        所以可以將函數按warning提示的第二句,改爲使用fopen_s函數即可:
        例如:FILE *pFile=fopen("1.txt", "w");
           改爲:
           FILE* pFile;
           fopen_s(&pFile, "1.txt", "w"); 
2> 還是根據warning提示的地三句話:use _CRT_SECURE_NO_DEPRECATE
        項目|屬性|配置屬性|C/C++|命令行|附加選項,加入【/D "_CRT_SECURE_NO_DEPRECATE" 】(注:加入中括號中完整的內容)
3> 降低警告級別:項目|屬性|配置屬性|C/C++|常規,自己根據情況降低警告級別(此法不推薦)
    注意:高度重視警告:使用編譯器的最高警告級別。應該要求構建是乾淨利落的(沒有警告)。理解所有警告。通過 修改代碼而不是降低警告級別來排除警告。
    編譯器是你的朋友。如果它對某個構造發出警告,這經常是說明你的代碼中存在潛在的問題。成功的構建應該是無聲無息的(沒有警告的)。【《C++編程規 範》】
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章