评论

收藏

[C++] C4996    'scanf': This function or variable......

编程语言 编程语言 发布于:2021-08-09 11:06 | 阅读数:387 | 评论:0

当我们使用Microsoft Visual Studio 2019编译器编写代码时,若要用到格式化输入函数scanf时,编译可能无法通过,会报一个错误,如下所示:
DSC0000.png

错误    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.      
意思就是:错误c4996 scanf”:这个函数或变量可能是不安全的。可以考虑使用scanf_s。若描述失效,请使用_CRT_SECURE_NO_WARNINGS。详情请参阅在线帮助。
那如何解决呢?解决方法如下:
解法一:(不建议,代码可移植性不佳):将scanf替换成scanf_s,即可编译成功,不报错,代码正常运行
scanf函数是C语言提供的,而scanf_s不是标准C语言提供的,而是VS编译器提供的,只有VS这个编译器能识别出来,当我们换个编译器时(譬如:GCC),那么GCC就不认识scanf_s这个东西了,此时,代码就不满足跨平台性(可移植性)!
解法二:在源文件的第一行添加一行代码:#define _CRT_SECURE_NO_WARNINGS 1
DSC0001.jpg

在源文件的第一行添加一行代码:#define _CRT_SECURE_NO_WARNINGS 1,其作用就是让刚刚的错误失效!
不是只有scanf不安全,后期像字符串函数 strcpy   strlen  strcat,这些都是C语言提供给我们的一系列库函数, 在传统意义上来说,这些库函数都是不安全的!
每次写一个程序,当要用到scanf时就要添加这行代码---#define _CRT_SECURE_NO_WARNINGS 1,这样就略显繁琐了!
解法三:找到编译器VS的安装路径,我的vs2019的安装路径如下:"E:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\devenv.exe"
直接去安装路径 E:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\VC\VCProjectItems,在其下搜索newc++file.cpp,找到之后右键编辑,将这行代码#define _CRT_SECURE_NO_WARNINGS 1放进去并保存,如拒绝访问,用Notepad++编辑,Notepad++这个工具的下载地址:https://notepad-plus-plus.org/downloads/,这个工具真心好用,使用Notepad++进行编辑,若无法编辑,则启用管理员模式进行编辑,最后ctrl+s 保存退出,这样以后在这个工程创建.c文件时就会默认出现#define _CRT_SECURE_NO_WARNINGS 1这句话了!
解法四:在VS中找到你当前所创建的项目,视图--->解决方案资源管理器--->找到你当前所创建的项目右键属性--->C/C++--->预处理器--->预处理器定义--->编辑--->将_CRT_SECURE_NO_WARNINGS加进去,应用,确定,这样编译也能通过!
DSC0002.jpg

DSC0003.jpg

DSC0004.jpg

以上4种方法均可有效解决scanf报错问题!
感谢阅读,与您分享!


关注下面的标签,发现更多相似文章