warning C4996: ‘sprintf’: This function or variable may be unsafe.问题解决

  • Post author:
  • Post category:其他


新的Security CRT functions(就是那些带有“_s”后缀的函数):

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这两个宏。