用Visual Studio编写c语言报错C4996 该如何解决

今天在用VS写C语言时,编译器报错C4996;在这里插入图片描述
此函数或变量可能不安全。请考虑使用safe_version相反。若要禁用弃用,请使用 _CRT_SECURE_NO_WARNINGS。
在这里插入图片描述
我以前用DEV、CV6.0 "scanf "从键盘输入都OK 啊 怎么现在用起了Visual Studio2017就不行了呢?于是我又把代码复制粘贴到DEV ,一气呵成,编译过程就像德芙,纵想湿滑。再回来看看VS,冰泉冷瑟弦凝结,毫无趣味。但为什么会这样呢?我跟着报错去了官网查看解决办法https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-3-c4996?redirectedfrom=MSDN&view=vs-2019#unsafe-crt-library-functions
官网是这样说的:
在这里插入图片描述
翻译:为了解决这个问题,我们建议您使用函数或变量safe_version。如果您已经验证了在您的代码中不可能发生缓冲区重写或超读,并且由于可移植性的原因您不能更改代码,那么您可以关闭该警告。
要关闭CRT中这些函数的弃用警告,请定义_CRT_SECURE_NO_WARNINGS。要关闭关于废弃全局变量的警告,请定义_CRT_SECURE_NO_WARNINGS_GLOBALS

查阅百度后得知:
C4996是因为使用了不安全的函数,例如scanf、gets等。VS中要求用MS自创的_s系列函数替代这些原始库函数,如用scanf_s替代scanf,以防止缓冲区溢出。原来Visual Studio 2017为了支持更加安全的新函数,已弃用某些 CRT 和标准 C++ 库函数和全局变量。所以我在调用“scanf”时编译器会发出警告。

  1. 方法一:禁用此警告,定义代码中宏 _CRL_SECURE_NO_WARNINGS :
  2. 方法二:在文件顶部加入一行:#define _CRT_SECURE_NO_WARNINGS,
  3. 方法三:在文件顶部加入一行:#pragma warning(disable:4996)。
  4. 方法四:展开“配置属性” 、“C/C++” 、“预处理器” 。 在“预处理器定义” 中,添加 _CRT_NONSTDC_NO_WARNINGS。 选择“确定” 进行保存,然后重新生成项目。
  5. 方法五:使用scanf_s:scanf在读取数据时不检查边界,可能会造成内存访问越界的问题,使用scanf_s,会多一个参数来控制读取的字符数量,这样确实比使用scanf输入更加安全。
  • Scanf_s
#include<stdio.h>
#include<stdlib.h>
int main()
{
	char str1[3];
	scanf_s("%s", str1, 4); 
	printf("%s\n", str1);
	return 0;
}
  • Scanf
#include<stdio.h>
#include<stdlib.h>
int main()
{
   char str1[3];
   scanf("%s", str1); 
   printf("%s\n", str1);
   return 0;
}

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值