【#define _CRT_SECURE_NO_WARNINGS】VS中的几种解决方案

 对于初学者在VS编译器中使用scanf、strcpy、fopen等一些函数报错的问题,错误内容为“错误C4996 'scanf': 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. ”。

原因在于scanf_s、strcpy_s、fopen_s不是标准C语言提供的,是由VS编译器提供的,编译时将会报错,举例了四个解决方案,最终效果都一样,在预编时加个宏处理一下,让其忽略安全检测,如下图所示:

【解决方案1】也是较为推荐的解决方案,在 VS 的安装路径下找到newc++file.cpp 文件,通常路径为:\VisualStudio_2015\VC\vcprojectitems,如下图所示:

下载Edit with Notepad++打开文件,在文件中输入“#define _CRT_SECURE_NO_WARNINGS”,保存退出即可(注意define后面的空格),之后每次在VS新建文件后,都会开开头自动生成“#define _CRT_SECURE_NO_WARNINGS”,不需要每次手敲,如下图所示:

【解决方案2】根据报错内容修改,用scanf_s函数替代scanf函数。考虑到后期代码在不同编译器下的可移植性,不推荐采用该解决方案。

【解决方案3】需要每次新建原文件后在原文件的第1行输入“#define _CRT_SECURE_NO_WARNINGS”。

【解决方案4】依次打开项目 -> 属性 -> C/C++ -> 预处理器 -> 预处理器定义中添加 _CRT_SECURE_NO_WARNINGS 这个预定义(注意不需要#define),同上该方案仅在当前工程内有效,每次新建需进行修改,如下图所示:

 综上所述,较为推荐【解决方案1】,可以永久性解决所出现的问题,一劳永逸。【解决方案2、3、4】也可以解决当前所出现的问题,但是会有一些小瑕疵,也在上述描述了,此处不再赘述。


版权声明:本文为CaiShaole原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。