VS2012 CRT函数安全错误(This function or variable may be unsafe)

来源:互联网 发布:成品app直播源码 编辑:程序博客网 时间:2024/04/29 21:40
经常使用visual studio 系列的软件的人相信对


error C4996: 'xxxx: This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 这种错误并不陌生,我也遇到过很多次,最多就是将xxx( )改成xxx_s( )就可以运行了,但是,最近我遇到了一个问题,无论改与不改都会报错。。。当我使用location( )获取本地时间时出现了如上的错误,当我改成location_s()时,会出现什么缺少参数啦,“errno_t" 类型的值分配到 "tm *"   诸如此类的错误,我纠结了好久,不停地问度娘,谷哥。。都没有什么行之有效的解决方案,最后在我不断地摸索下,终于在MSDN上找到了答案,再结合度娘给出的方案,现给出如下几个解决CRT函数安全的方案:

1、

you can add "_CRT_SECURE_NO_DEPRECATE" in Preprocessor Definitions.

Right-click your project->Properties->Configuration Properties->Preprocessor->Preprocessor Definitions

这是从MSDN上的方法,也是解决我问题的方法:
把"_CRT_SECURE_NO_DEPRECATE 加入预处理定义中

右击工程->属性->配置属性->预处理器->预处理定义

2、

In stdafx.h file, please add "#define_CRT_SECURE_NO_DEPRECATE" before include other header files.

这也是MSDN上的

3、

#pragma warning(disable:4996) //全部关掉

 #pragma warning(once:4996) //仅显示一个

4、在每个文件最前面加"#define_CRT_SECURE_NO_DEPRECATE”

附:

CRT函数就是标准的C语言函数,安全CRT(C Runtime Library = C运行时间库)函数,是微软公司对C/C++语言的扩展。它在原来函数名后添加了“_s”后缀;一般返回出错代码;并将原来的函数返回值,作为一个参数,添加到函数输入参数列表的最后;对带缓冲区参数的函数,还添加了表示缓冲区大小的输入参数,以防止内存溢出。
在VC05中,如果不使用这些安全性函数,编译器会报告警告性错误。

_CRT_SECURE_NO_DEPRECATE标记  :来忽略这些CRT函数不安全的警告问题

0 0