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

 

[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++開發項目碰到的問題及解決方法 


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

好比: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_sui

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這兩個宏。spa

相關文章
相關標籤/搜索