scanf() scanf_s() 区别
2015-05-29 17:21
190 查看
写博原因:这几天由于小学期的缘故,接触到了好多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等等数据类型都有长度的限制,以后需要注意
如果所写东西有错误的地方,欢迎指正。
错误 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等等数据类型都有长度的限制,以后需要注意
如果所写东西有错误的地方,欢迎指正。
相关文章推荐
- JAVA作业—从命令行输入两个参数打开文件并计算代码行数 .
- .NET 4.0下使用 SignalR (2)
- JavaScript UserAgent判断---摘自Professional JavaScript for Web Developers 3rd
- ASM(active shape model)算法简介(一)
- Java编程思想之-匿名内部类
- OpenDaylight学习 ( by quqi99 )
- Node.js 函数
- Node.js 路由
- 自动填充英文字母序列
- 第一次提交代码到github时经常遇到的问题
- 【leetcode】Sqrt(x)
- Solr查询query效果对比
- Tomcat 7最大并发连接数的正确修改方法
- JavaSE之面向对象
- 如何使用NetScaler实现http页面跳转https
- 第一次作业:源代码计算器 学习流程
- Node.js模块系统
- Node.js 事件
- Node.js 路由
- POJ 3692 最大团