error C4996: 'sprintf': This function or variable may be unsafe.


 

error C4996: 'sprintf': This function or variable may be unsafe.

 
error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

Visual Studio 2012諸如此類的問題

 

[html]  view plain copy
 
  1. 原因是Visual C++ 2005使用了更加安全的run-time library routines。   
  2. 新的Security CRT functions(就是那些帶有“_s”后綴的函數):   
  3. http://msdn2.microsoft.com/en-us/library/wd3wzwts(VS.80).aspx   
  4. 那么如何搞定這些警告呢:  

 

以下為轉載

初次使用VS2010基於C++開發項目碰到的問題及解決方法 


1、將過去的工程用VS2010打開的時候。你有可能會遇到一大堆的警告:warning C4996。 

比如:warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. 
原因是Visual C++ 2005使用了更加安全的run-time library routines。 
新的Security CRT functions(就是那些帶有“_s”后綴的函數): 
http://msdn2.microsoft.com/en-us/library/wd3wzwts(VS.80).aspx 
那么如何搞定這些警告呢:

原因解釋
這種微軟的警告,主要因為那些C庫的函數,很多函數內部是不進行參數檢測的(包括越界類的),微軟擔心使用這些會造成內存異常,所以就改寫了同樣功能的函數,改寫了的函數進行了參數的檢測,使用這些新的函數會更安全和便捷。關於這些改寫的函數你不用專門去記憶,因為編譯器對於每個函數在給出警告時,都會告訴你相應的安全函數,查看警告信息就可以獲知,在使用時也再查看一下MSDN詳細了解。庫函數改寫例子:
mkdir改寫為 _mkdir 
fopen”改寫為 fopen_s 
stricmp改寫為 stricmp_s
sprintf改寫為sprintf_s

strcpy改寫為strcpy_s

方法一:調用VS2005鼓吹的那些帶“_s”后綴的非標准函數,即在其后加上"_S",如sprintf改為sprintf_s    。
方法二:在文件最開始添加#define _CRT_SECURE_NO_DEPRECATE或#pragma warning(disable:4996)     ,這是忽略警告的方法(一般比較少用)。
方法三:干粹在工程屬性中設置(推薦)。

在工程屬性中設置的方法如下:

對於VC6:
打開Project----settings----Resources----Preprocessor definitions,
添加_CRT_SECURE_NO_DEPRECATE和_SCL_SECURE_NO_DEPRECATE這兩個宏。


對於VS系列的版本:
打開項目----項目屬性---配置屬性----C/C++ ----預處理器----預處理定義,
添加_CRT_SECURE_NO_DEPRECATE和_SCL_SECURE_NO_DEPRECATE這兩個宏。

 


免責聲明!

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



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