scanf在VS中报错

发布时间 2023-07-22 10:01:24作者: C羽言

为啥在VS中使用scanf,strcpy strlen strcat 等函数会有警告呢?
scanf是c语言提供的函数,但函数本身自带安全性问题,微软工程师为了解决这些安全问题,在VS2013以上的版本上添加了scanf_s 这类函数。
scanf_s vs编辑器提供的,虽然提高了安全性能,但移植性太差,故不建议使用。

解决办法:

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

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

 

scanf和scanf_s的区别?

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

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

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