VS2017中”This function or variable may be unsafe”警告的解决方法

警告原因

C语言标准输入函数scanf / gets等在设计的时候都没有考虑到写入内存越界的问题,导致有时候会发生玄学错误(当然这大多数时候都是使用函数的人写挫了的问题,C语言并不会限制你干很多也许并不正确的事情)。
为了解决这个问题,VS(大概是2013及以后的版本)中提供了C语言这些标准输入函数的替代品:scanf_s / get_s等,通过额外参数限制内存读写范围来确保你的输入函数不会做可怕的事情,关于这些函数不是这篇blog讲解的范围,具体可见这里

解决

当然,我推荐你听从VS的建议,使用scanf_s等更加“安全”的函数,不过如果是那样的话你大概不会点进这篇blog。
通过分析报错信息,我们可以找到关于这个警告的错误信息的宏定义:

"crtdefs.h"
#define _CRT_INSECURE_DEPRECATE(_Replacement) _CRT_DEPRECATE_TEXT("This function or variable may be unsafe. Consider using " #_Replacement " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.")

那么根据这条宏定义的提示,我们只需要在源代码前面(理论上是在所有代码之前)定义这个_CRT_SECURE_NO_WARNINGS变量就好了

//在你的程序开头加入这句话
#define _CRT_SECURE_NO_WARNINGS
...

如果不想在自己的代码最前面加入这句话怎么办呢…
那就让VS帮你加上!

在项目属性设置中的预处理器定义部分的参数末尾加上_CRT_SECURE_NO_WARNINGS就好了
以VS2017为例: