前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C4996 “scanf“ 问题——初学者使用VS的拦路虎

C4996 “scanf“ 问题——初学者使用VS的拦路虎

作者头像
北 海
发布2023-07-01 10:39:53
4390
发布2023-07-01 10:39:53
举报
文章被收录于专栏:用户10155340的专栏


🎉前言

  微软的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 这会导致程序的可移植性变差,比如 scanf_sLinux 平台下使用就会提示语法错误 下面开始介绍最好用的屏蔽方法(不挑版本):


♦️解决方法

解决方法就是按照 Visual Studio 给出的提示,加上 _CRT_SECURE_NO_WARNINGS 这句话即可屏蔽 C4996 问题。 因为是在程序中,因此需要这样写 : #define _CRT_SECURE_NO_WARNINGS 1 这句话一般位于源文件顶部:

这样能解决了本次 C4996 的问题,但不能彻底解决这个问题,因为我们 重新创建源文件后需要再次重新添加这段屏蔽代码,非常麻烦,有没有一劳永逸的方法呢?当然有!


 1.搜索文件夹

 通过 Visual Studio 的图标找到它​​​​的安装路径,找不到也没关系,我们可以通过在桌面图标上单击鼠标右键 -> 选择打开文件位置 -> 进入Visual Studio 所在的文件夹中 -> 搜索 *newc -> 等待结果出来。

在此文件夹中搜索 *newc 文件后,结果如下图所示,成功后可进入下一步

注意:不同环境搜索结果略有差异,但只要能搜出 *newc 关键字相关文件,就可以进入下一步了

如果没有成功打开目标文件夹,可以继续往下看,成功打开文件夹的可以跳到下一步

可能有人照做后,打开的文件夹类似这个样子: 

 这是因为此时打开的是 快捷方式 所在的文件夹,如果需要继续访问 Visual Studio  所在文件夹,需要对它的快捷方式进行操作

进行如上操作,就能顺利的看到  Visual Studio 真正的文件夹了


2.复制文件路径 

文件路径待会要用,最好是能记下目标文件长啥样,方便后面一眼认出来。 一般目标文件为 newc++file.cpp 或者 newc++file

如何复制文件路径?

跟着动图操作,就可以成功复制当前文件夹所在路径了 


 3.打开记事本(管理员身份) 

因为 Visual Studio 默认不让用户随意修改文件内容,所以我们需要通过 管理员 身份打开记事本,以管理员身份访问目标文件,才可以做到修改文件内容。


 4.找到目标文件

目的文件的寻找需要用到刚刚的地址,将地址粘贴到搜索框内,很快就能找到目标文件,如果看不到,有可能是因为查看方式没设对,需要设置为查看 所有文件。


5.修改文件内容

当我们打开目标文件后会发现里面什么也没有,这时把我们的屏蔽代码粘贴进去即可,关闭记事本(记得点击保存),这样我们的目标文件就修改好了。 #define _CRT_SECURE_NO_WARNINGS 1    


♣️测试 

 经过我们的一番操作,已经告诉了编译器一件事:每次新建源文件时都帮我们加上这段屏蔽代码,编译器也是很听话,每次都会给我们加上代码,以便我们能愉快的使用 scanf 至于这段代码什么时候失效:

  1. 重装编译器时,此时目标文件内容会重置
  2. 升级 Visual Studio 时,有可能VS在升级后会将目标文件覆盖(没测试过,但最好别升级)
  3. 更换电脑时,毕竟不是每个人的 Visual Studio 都会像我们一样操作过,所以每换一次电脑就需要重新检查、操作一遍

 🎉总结

  本文给大家介绍了 C4996 问题出现的原因以及解决方法,scanf_s 虽好,可不要随便用,学会使用我们的一劳永逸方法才舒服,让编译器由原来的禁止到帮我们写屏蔽代码,微软看了都想连夜修复这个漏洞。如果你学会了解决 C4996 的方法,不妨去自己电脑上操作一下,如果成功了记得去帮你的同学解决这个问题。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-04-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🎉前言
  • ♥️正文
    • ♠️scanf_s 
      • ♦️解决方法
        •  1.搜索文件夹
        • 2.复制文件路径 
        •  3.打开记事本(管理员身份) 
        •  4.找到目标文件
        • 5.修改文件内容
      • ♣️测试 
      •  🎉总结
      相关产品与服务
      腾讯云服务器利旧
      云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档