scanf() scanf_s() 区别

本文介绍了C语言中标准输入函数scanf及其安全版本scanf_s的区别。详细解释了scanf_s如何通过检查边界来避免越界问题,并给出了示例代码。对于使用VS进行C语言编程的开发者来说,了解这些内容有助于提升代码安全性。

写博原因:这几天由于小学期的缘故,接触到了好多C代码,在VS2013中编译的时候,遇到了如下问题:

错误 1 error C4996: '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. c:\users\revenge\documents\visual studio 2013\projects\克鲁斯卡尔\克鲁斯卡尔\源.cpp 17 1 克鲁斯卡尔

查了资料,学到了些东西

scanf()函数是标准C中提供的标准输入函数,用以用户输入数据

scanf_s()函数是Microsoft公司VS开发工具提供的一个功能相同的安全标准输入函数,从vc++2005开始,VS系统提供了scanf_s()。在调用该函数时,必须提供一个数字以表明最多读取多少位字符。

 

scanf()在读取数据的时候不会检查边界,如果编程的时候输入的数据大于分配的内存空间,进而会导致程序的运行异常

scanf_s()在读取数据的时候会检查边界,如果输入的数据达到了所请求的内存空间,则不会再读入数据

例如:

char buf[5]={'\0'};
scanf_s("%s",buf,5); 

因为定义的缘故,最多只能读取四个字符,当输入0123456789的时候,buf只会接受前4个字符

 

与这个类似的情况,还有C++  int   long等等数据类型都有长度的限制,以后需要注意

 

如果所写东西有错误的地方,欢迎指正。

 

转载于:https://www.cnblogs.com/revenge/p/4539052.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值