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