VS2022中的sacnf和scanf_s

1.   返回值被忽略: “scanf”。 

2.   'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.   

scanf这个函数或变量可能存在安全问题。考虑使用scanf_s代替。要禁用此警告,请使用_CRT_SECURE_NO_WARNINGS。详细信息请参阅在线帮助。”

直接把scanf改成scanf_s就好,其实我这句直接改成scanf_s就好是有问题的,我也不想建议新手养成这种坏习惯,因为这样写会降低代码的可移植性,不具有跨平台性。

  

第二种方法:把#define _CRT_SECURE_NO_WARNINGS加进去

#define _CRT_SECURE_NO_WARNINGS

这一句话是哪来的?

从输入scanf运行报错后下面的错误里面复制的。

2.   'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.   

scanf这个函数或变量可能存在安全问题。考虑使用scanf_s代替。要禁用此警告,请使用_CRT_SECURE_NO_WARNINGS。详细信息请参阅在线帮助。”

它还是会有一个警告,但是能够运行了。

如果你觉得每次都要去复制粘贴太麻烦了,

VS2022
项目->Test和属性

C/C++->预处理器->预处理器定义->_CRT_SECURE_NO_WARNINGS

首先说明scanf_s不是C11标准里面的,而是VS编译器提供给我们的。

为什么要为我们提供这个呢?

scanf函数是一种常用的输入函数,用于从标准输入(通常是键盘)读取数据并将其存储到指定的变量中。然而,由于scanf在设计上并未对输入长度进行严格的限制,因此在使用时可能会引发一些隐患:

  1. 缓冲区溢出scanf在读取字符串时,如果输入的字符串长度超过了预留的缓冲区长度,会导致缓冲区溢出。这种溢出可能导致程序崩溃或允许攻击者利用溢出的空间执行恶意代码。

  2. 未能准确读取scanf在读取数据时,可能无法准确读取到想要的类型或数据量。例如,scanf可能在遇到空格、换行符等分隔符时停止读取,从而导致读取到的数据不完整或与预期不符。

  3. 输入错误处理scanf在遇到类型不匹配的输入时,会返回读取的元素数量,但它无法有效地处理错误输入或非法输入。这可能导致程序在执行过程中出现意外情况。

  4. 无上限输入scanf在读取输入时,没有明确的上限,因此它可能会继续读取输入,直到遇到输入结束。这可能导致输入缓冲区被意外填满,或导致程序卡住等待更多输入。

 这里我翻了一下C11的标准,在输入输出函数里面,没有关于scanf_s的定义,结合我百度的资料来看,scanf_s确实只是VS里面引入的一个工具,即使在信息发展如此迅猛,AI工具如此多的时代,我们也要自己多查资料,多翻资料,因为我直接问的AI,它给出了我错误的答案,至少在C11标准里面,scanf_s确实没有被包含在里面。

这里我推荐一款插件,可以把英文翻译成中文,我觉得很赞,而且也有免费的可以使用,是适用于Microsoft Edge浏览器使用的

沉浸式翻译 - 网页翻译插件 | PDF翻译 | 免费 - Microsoft Edge Addons

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

W是笔名

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值