scanf和scanf_s的区别及如何解决scanf_s报错问题

scanf和scanf_s的区别及如何解决scanf_s报错问题

亲爱的小伙伴们:

大家好!

今天,同学问了我一个问题,scanf和scanf_s有什么区别吗?她在调试代码时 scanf("%c %c",&a,&b);时总是报错,解决不了啊,跑来问我,我也是一脸懵,以前我都是用的scanf就可以了,于是今天认真研究了两者区别,下面分享给有需要的伙伴。

scanf有安全漏洞,具体体现在以%s接受输入的数据时(%c,%d,%f之类的没什么影响),多余的数据读多了,或者没读完(易被黑客利用),在VS2005版本中微软发布了scanf_s以替代scanf,所以在功能上两者最大的区别是安全性。

scanf_s需要更多的参数(即输入数据所占的字节数),我们可以看到scanf_s("%c",&a);有明显的警告,但程序依旧可以跑起来,影响不大。

但如果是scanfs("%s",arr);的话,直接程序崩溃,感受到差别了吗,你可以这么认为scanf_s就是为%s而生的,必须传参数

以上就是关于scanf和scanf_s的区别。

但我建议初学的时候就用scanfs没有必要,scanf它不香吗?下面提供解决scanf_s报错警告的两种方法

1.解决办法:打开“项目”——“ConsoleApplication1属性”,在VC++的预处理器定义部分添加_CRT_SECURE_NO_DEPRECATE即可。

2.顶部加上这一段#define _CRT_SECURE_NO_WARNINGS 宏定义

加油吧,追逐远方的星辰大海。(给你满满的动力)

发布于 2021-10-02 17:17