前言
- scanf函数是我们经常使用的输入函数之一,但在VS环境中运行时,却会报出系统错误。
- 翻译过来为:
- 此函数或变量可能不安全。请考虑改用scanf_s。要禁用弃用,请使用_CRT_SECURE_NO_WARNINGS。有关详细信息,请参阅联机帮助
- 造成这种情况的主要原因是微软认为scanf函数不安全,可能会导致安全漏洞。
- 为了解决这个问题,下面提供以下方法供小伙伴们参考:
一、方法一
- 使用 scanf_s 函数代替 scanf 函数
- scanf_s 是 VS 编译器提供的一个函数,它与 scanf 函数的功能类似,但更加安全。
- 注意:
- 1、在使用 scanf_s 函数时,需要注意它的参数和返回值与 scanf 函数有所不同。
- 2、scanf_s是VS提供的,不具备移至性,跨平台后就无法使用了。
二、方法二
- 在代码开头添加 #define _CRT_SECURE_NO_WARNINGS
- 这行代码的作用是告诉 VS 编译器不要检查 scanf 函数的安全性警告。这种方法比较简单,但可能会隐藏一些潜在的安全问题。
- 注意:
- 1、#define 和 _CRT_SECURE_NO_WARNINGS之间是存在一个空格的,手动输入的时候易忽略。
- 2、该行代码一定要放置在scanf函数使用的.c文件的第一行。
- 虽然这行代码能解决问题,但每次输入都需要手动输入,繁琐、麻烦。
三、方法三(一劳永逸)
- 修改 newc++file.cpp 文件
- 只要安装好VS软件,在安装路径下就会有一个 newc++file.cpp 的文件
- 我们所建的 .c / .cpp 的文件均是拷贝newc++file.cpp 这个文件的!
-
具体方法
- 在文件上点击右键,使用VS或者记事本打开均可
- 直接将 #define _CRT_SECURE_NO_WARNINGS 复制进来,然后保存即可。
- 注意:
- 有的小伙伴在保存时会因为权限不够,无法保存。碰到这种情况时,可以将该文件复制到桌面进行保存,因为桌面上的操作权限是比较高的,保存好之后再覆盖原文件即可。
四、方法四
- 让警告和错误失效
- 报错时会显示错误代码,记住这个代码。
- 在程序开头加入这样一行代码 #pragma warning(disable:4996) ,这样系统就可以屏蔽掉这个报错信息了。
- 这种做法只屏蔽掉了这个错误,针对性强。
五、总结
- VS 中使用 scanf 报错的处理方法总结以下主要有以下几种:
- 1、使用 scanf_s 函数替代 scanf 函数:scanf_s 函数是微软为了解决 scanf 函数的安全问题而提供的替代函数。它在功能上与 scanf 函数相似,但增加了一些安全检查,以避免缓冲区溢出等安全问题。可以在代码中使用 scanf_s 函数来代替 scanf 函数。
- 2、添加防报错语句:在源文件的第一行添加 #define _CRT_SECURE_NO_WARNINGS 这串代码,可以屏蔽掉 vs 编译器对函数危险性的排查报错,使代码能够正常运行。这种方法的缺点是每次写代码之前都需要打上这么一个 define 语句,比较麻烦。
- 3、一劳永逸的方法:找到 VS 编译器默认安装路径下的 newc++file.cpp 文件,将其拖到桌面上,用记事本打开该文件,在里面加上 #define _CRT_SECURE_NO_WARNINGS 这段话并保存。然后将桌面上的 newc++file.cpp 文件拖回原来路径,点击继续。这样,在创建一个 c 语言代码就会自动生成该语句了。
- 4、让该错误和警告失效:在程序开头加入这样一行代码 #pragma warning(disable:4996) ,屏蔽掉这个错误。