对于VS编译器,scanf函数由于会存在溢出问题使代码报错并无法运行,一下提供4种解决方法
1、使用scanf_s函数
对于scanf函数不安全的问题,VS提供了scanf_s来代替scanf使用,通过检查输入数据边界来避免安全问题
优点
使用便捷
缺点
是VS提供的函数,在更改编译器后可能出现不能正常使用的问题
(在Ep001解决问题时使用到了该方法)
2.1、定义预定符号
在使用scanf报错时会有这样的错误提示
该串提醒在警告scanf存在风险,提示无法使用,但说到“使用 _CRT_SECURE_NO_WARNINGS”来解决,具体方法就是在最开始使用“#define _CRT_SECURE_NO_WARNINGS 1”来无视scanf的风险
缺点
但这样会导致每新建的项目想使用scanf时需要手动声明
2.2、自动定义预定符号
在VS安装路径中存在一个叫“new C++file.cpp”的文件,在其中写下“#define _CRT_SECURE_NO_WARNINGS 1”并保存可以使每次新建的C文件都会自带上这段代码
3、设置项目属性中的预处理器(不推荐)
右键当前项目,在属性中选择预处理器,在预处理器定义中加上一条“#define _CRT_SECURE_NO_WARNINGS 1” 注意:预处理器中条代码间应用分号隔开
缺点
麻烦,太麻烦了 而且个人感觉好像和2.1本质没有啥区别但是操作更麻烦了,可能就是可以直接在大项目离去定义,免得每个源文件都要写一遍吧qwq
4、在建立项目时的处理
新建项目时选择”Win32控制台“ 通过取消”预编译头“和”安全开发生命周期检查“来关闭VS对scanf不安全的限制以使用scanf
缺点
开发到一半咋整qwq,就还是用前面的方法吧 或者复制一遍代码过去hhh
5、部分参考资料
B站视频:BV1oi4y1g7CF