解决【C++】不安全函数告警

一.错误信息

错误详细信息
C4996‘scanf’:This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.

vs2019使用更安全的c14/c17标准, 认为这类函数不安全。
这类函数正常使用时,是没有任何问题的。但是,部分黑客可能会利用其中的缺陷,开发恶意软件,对系统造成影响(缓冲区溢出,程序崩溃)。

二.代码

#include <iostream>
#include <string>
#include <stdio.h>
using namespace std;

int main(void)
{
	int num;
	scanf("%d", &num);

	return 0;
}

三.解决方案

方法1:使用修改项目的属性,直接使用这些“不安全”的函数。
在项目名称上右键,选择项目属性
添加: /D _CRT_SECURE_NO_WARNINGS
在这里插入图片描述

方法2:使用c14标准中的“更安全”的函数
scanf_s

(数组在c中的scanf不需要取地址&,因为本身就代表了地址)

四.gets_s与scanf_s使用方法

  1. gets不能使用,使用gets_s
    (gets是老标准C语言函数,vs使用更安全的c11标准, 使用对应的gets_s
    char line[32];
    gets_s(line, sizeof(line));//或者写为gets_s(line,32);

  2. scanf不能使用
    原因同上,改用scanf_s
    若用scanf输入字符串,没有第三个参数故不知多长,若长度越界,则占用其他内存非常可怕

int x;
scanf_s("%d", &x);  //不需要使用第3个参数,用法和scanf相同

float  f;
scanf_s("%f", &f);  //不需要使用第3个参数, 用法和scanf相同

char c;
scanf_s("%c", &c, sizeof(c)); //需要使用第3个参数, 否则有告警

char name[16];
scanf_s("%s", name, sizeof(name)); //需要使用第3个参数

int age;
char name[16];
scanf_s("%d%s", &age, name, sizeof(name));
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值