微软的VS系列编译器号称地表最强集成开发环境(IDE),现在已经更新到了2022版,丰富的功能和高级的界面,对于学校里用的VC++ 6.0简直是降维打击,很多追求优质编码环境的同学可能都会去网上找到VS的资源,然后安装使用,当一切环境准备就绪时,发现涉及到使用 scanf 的代码无法编译,再三检查后发现代码没有任何问题,一时间甚至会怀疑自己是不是下错了编译器。其实没有,这是一个很常见的报错,也是所有想用VS的同学必过的一道坎。下面让我来教大家如何跨过这道坎:
某度 C4996 搜索关键词
让我们直接先进入 使用报错的场景
微软为了提高编程时的 “安全性”(scanf 有缺陷)以及增加用户对自己产品的依赖性(scanf_s 只能在VS上使用),于是便设计了一个跟 scanf 功能相似的函数 scanf_s ,想用更全面的函数弥补 scanf 的缺陷,虽说微软本意是好的,但是像这种强制引导使用 scanf_s 的行为对新手是很不友好的,并且我们初学阶段很难接触到那些使用缺陷。 试想一下,张三听了自己的 C语言 老师讲了几堂课,在 VC++ 6.0 这种老平台已经熟练的使用 scanf ,想着换更高级的 Visual Studio 来用用,结果发现自己熟悉的 scanf 一使用就报错,简直就是怀疑人生。 既然微软提供了 scanf_s 这个新函数,那就让我们先试用一下。
不推荐在项目中使用 scanf_s 这会导致程序的可移植性变差,比如 scanf_s 在 Linux 平台下使用就会提示语法错误 下面开始介绍最好用的屏蔽方法(不挑版本):
解决方法就是按照 Visual Studio 给出的提示,加上 _CRT_SECURE_NO_WARNINGS 这句话即可屏蔽 C4996 问题。 因为是在程序中,因此需要这样写 : #define _CRT_SECURE_NO_WARNINGS 1 这句话一般位于源文件顶部:
这样能解决了本次 C4996 的问题,但不能彻底解决这个问题,因为我们 重新创建源文件后需要再次重新添加这段屏蔽代码,非常麻烦,有没有一劳永逸的方法呢?当然有!
通过 Visual Studio 的图标,找到它的安装路径,找不到也没关系,我们可以通过在桌面图标上单击鼠标右键 -> 选择打开文件位置 -> 进入Visual Studio 所在的文件夹中 -> 搜索 *newc -> 等待结果出来。
在此文件夹中搜索 *newc 文件后,结果如下图所示,成功后可进入下一步
注意:不同环境搜索结果略有差异,但只要能搜出 *newc 关键字相关文件,就可以进入下一步了
如果没有成功打开目标文件夹,可以继续往下看,成功打开文件夹的可以跳到下一步
可能有人照做后,打开的文件夹类似这个样子:
这是因为此时打开的是 快捷方式 所在的文件夹,如果需要继续访问 Visual Studio 所在文件夹,需要对它的快捷方式进行操作
进行如上操作,就能顺利的看到 Visual Studio 真正的文件夹了
文件路径待会要用,最好是能记下目标文件长啥样,方便后面一眼认出来。 一般目标文件为 newc++file.cpp 或者 newc++file
如何复制文件路径?
跟着动图操作,就可以成功复制当前文件夹所在路径了
因为 Visual Studio 默认不让用户随意修改文件内容,所以我们需要通过 管理员 身份打开记事本,以管理员身份访问目标文件,才可以做到修改文件内容。
目的文件的寻找需要用到刚刚的地址,将地址粘贴到搜索框内,很快就能找到目标文件,如果看不到,有可能是因为查看方式没设对,需要设置为查看 所有文件。
当我们打开目标文件后会发现里面什么也没有,这时把我们的屏蔽代码粘贴进去即可,关闭记事本(记得点击保存),这样我们的目标文件就修改好了。 #define _CRT_SECURE_NO_WARNINGS 1
经过我们的一番操作,已经告诉了编译器一件事:每次新建源文件时都帮我们加上这段屏蔽代码,编译器也是很听话,每次都会给我们加上代码,以便我们能愉快的使用 scanf 至于这段代码什么时候失效:
本文给大家介绍了 C4996 问题出现的原因以及解决方法,scanf_s 虽好,可不要随便用,学会使用我们的一劳永逸方法才舒服,让编译器由原来的禁止到帮我们写屏蔽代码,微软看了都想连夜修复这个漏洞。如果你学会了解决 C4996 的方法,不妨去自己电脑上操作一下,如果成功了记得去帮你的同学解决这个问题。