我的特一营演员(我的特一营演员表小岛)
8652023-12-02
style="text-indent:2em;">很多朋友对于scanf与scanf-s的区别是什么和不建议使用scanf不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
本文目录
scanf和scanf-s是C语言中输入函数的两种形式,它们的主要区别在于安全性。scanf是C语言的标准输入函数,它不对输入的内容进行任何安全检查,容易造成缓冲区溢出等安全问题;而scanf-s是MicrosoftVisualStudio编译器中提供的扩展输入函数,在输入之前会对缓冲区数据进行安全检查,防止因输入数据过长导致的缓冲区溢出等安全问题。
在编写C程序时,如果程序对输入的内容长度不确定或存在可能造成安全隐患的情况,建议使用scanf-s函数来保证程序的安全性。
应@真正的力子的邀请,来回答这个问题,看了一下这个问题,让我想起了我大一,刚刚跨入大学的时候,遇到的第一个ACM的编程题目,先把题目贴一下:
很简单,就是两个数相加,输出加的结果。我们先来测试一下两段代码的性能,再来分析慢还是快,为什么用cin在写上面这个问题的时候,总是TimeOut,而必须使用while(scanf("%s%s",&a,&b)!=EOF){}才行。a.cpp用C++写的一个代码,很简单,如下所示:
b.cpp,用C语言写的一个实现同样功能的代码,如下所示:
OK,我们伪造1亿条数据取测试一下,看看代码的性能如何,经过测试,我的机器配置如下
Linux4.9.0-0.bpo.3-amd64#1SMPDebian4.9.30-2+deb9u5~bpo8+1(2017-09-28)x86_64GNU/Linuxscanf和printf组合运行的时间是33秒,而cin和cout的运行时间是230秒。可想而知,性能差距是多大啊。
一般来说,在ACM比赛中,我们都会建议用scanf,而不用cin,因为cin是C++编程语言中的标准输入流对象,即istream类的对象。cin主要用于从标准输入读取数据,这里的标准输入,指的是终端的键盘。
使用scanf时会出现警告或报错
errorC4996:'scanf':Thisfunctionorvariablemaybeunsafe.Considerusingscanf_sinstead.Todisabledeprecation,use_CRT_SECURE_NO_WARNINGS.
意思是这个函数可能不安全,建议使用scanf_s替代,或者去掉这个警告,使用_CRT_SECURE_NO_WARNINGS。
解决方法
1、使用scanf_s代替scanf(其他编译器可能不能进行编译)
2、在最上方加入宏_CRT_SECURE_NO_WARNINGS(必须在最上方)
#define_CRT_SECURE_NO_WARNINGS1
3、在文件上方添加忽略警告
#pragmawarning(disable:4996)
一劳永逸的解决方法
1、右击工程
2、点击属性
3、c/c++->预处理器
4、在预处理器定义中添加_CRT_SECURE_NO_WARNINGS
5、点击确定
优点:速度快
缺点:代码稍微长点,难写一点
cout
优点:写入方便
缺点:速度慢
scanf/printf相对于cin/cout,将近快一倍左右。
如果将同步关闭的时候,cin稍慢于scanf,但是个别情况下还是会慢很多。
建议不要搞辣么多花里胡哨的东西!直接scanf和printf(在输入输出特别大的时候)。
关于scanf与scanf-s的区别是什么和不建议使用scanf的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。