VS2013中scanf,print不安全
2016-11-01 09:35
155 查看
出现这种情况的原因是我们使用了不安全的CRT函数,旧式的scanf在读取数据的时候会根据format指示从缓冲区中读取直至结束,但有些时候我们的format指示会有Bug,导致scanf读取了给定的缓冲区以外(数组越界)的数据。
看下例:
scanf(“%d”, &a);
假设我们输入数字1234,然后按回车。正常情况下,缓冲区中有一个数组1234、一个换行符(通常是”\r\n”),这时读取正确。但“有些时候”,缓冲区中的数据并不一定正确,这时候我们需要给定缓冲区的起始位置和缓冲区的长度来限制scanf的读取范围。但设计CRT函数的人在设计scanf的时候没有考虑到这么多的不安全因素,所以有了安全版本的scanf,级scanf_s,s的意思就是safe,我们会看到很多_s版本的函数,sprintf_s,vsnprintf_s等等,它们的作用都是一样的。总之,带_s的函数是不带_s的安全版本。我们习惯使用了不带s的版本,有时vs就会报各种错。下面有两种解决方法。
新建项目的时候,在最后一步的一个界面,把安全开发生命周期(SDL)检查(C)前面的对号勾掉。
Properties->configuration properties->C/C++ ->general->SDL checks() 选择no
如果新建的时候忘记勾了,可以右击项目列表, Properties->configuration properties->C/C++ ->Preprocessor->Preprocessor Definitions 编辑,加上 _CRT_SECURE_NO_WARNINGS。
以上解决了scanf_s报错的问题,但个人建议使用这类函数都加上_s,养成个人习惯了就好了,毕竟加上后缀是一个安全的函数,以免出现不可预知的问题。
看下例:
scanf(“%d”, &a);
假设我们输入数字1234,然后按回车。正常情况下,缓冲区中有一个数组1234、一个换行符(通常是”\r\n”),这时读取正确。但“有些时候”,缓冲区中的数据并不一定正确,这时候我们需要给定缓冲区的起始位置和缓冲区的长度来限制scanf的读取范围。但设计CRT函数的人在设计scanf的时候没有考虑到这么多的不安全因素,所以有了安全版本的scanf,级scanf_s,s的意思就是safe,我们会看到很多_s版本的函数,sprintf_s,vsnprintf_s等等,它们的作用都是一样的。总之,带_s的函数是不带_s的安全版本。我们习惯使用了不带s的版本,有时vs就会报各种错。下面有两种解决方法。
新建项目的时候,在最后一步的一个界面,把安全开发生命周期(SDL)检查(C)前面的对号勾掉。
Properties->configuration properties->C/C++ ->general->SDL checks() 选择no
如果新建的时候忘记勾了,可以右击项目列表, Properties->configuration properties->C/C++ ->Preprocessor->Preprocessor Definitions 编辑,加上 _CRT_SECURE_NO_WARNINGS。
以上解决了scanf_s报错的问题,但个人建议使用这类函数都加上_s,养成个人习惯了就好了,毕竟加上后缀是一个安全的函数,以免出现不可预知的问题。
相关文章推荐
- 怎样解决VS2013模块对于SAFESEH 映像是不安全的
- vs2013关闭安全函数检查
- 怎样解决VS2013模块对于SAFESEH 映像是不安全的
- c语言 vs2013 安全检查
- scanf()函数在vs2013中取消报错的方法
- 在用vs2013时,遇到的报因函数不安全的错误
- vs 2013 使用scanf获取输入字符和字符串
- 15、VS2013编写程序时scanf出现的编译错误
- VS2013中错误error LNK2026: 模块对于 SAFESEH 映像是不安全的
- VS2013中使用格式化输入输出(scanf printf)warnings
- _CRT_SECURE_NO_WARNINGS VS2013安全编译问题解决
- VS2013使用scanf、gets及字符串函数编译报错error C4996: 'scanf': This function or variable may be unsafe. 原因及解决方案
- VS2013使用scanf、gets及字符串函数编译报错error C4996: 'scanf': This function or variable may be unsafe. 原因及解决方案
- VS提示scanf不安全问题
- _CRT_SECURE_NO_WARNINGS VS2013安全编译问题解决
- VS中提示scanf不安全
- VS2013使用scanf报错
- vs2013遇到fopen不安全替换fopen_s的问题
- VS2013 编译 遇到 error LNK2026: 模块对于 SAFESEH 映像是不安全的。
- VS2013使用scanf报错