首页 > 编程知识 正文

vs2019scanf报错,vs2019scanf不能用

时间:2023-05-04 14:20:43 阅读:258849 作者:314

一、问题再现

如下是笔者在学习数据结构中的二叉树时遇到的问题:

报错警告:返回值被忽略:"scanf"。

二、问题分析

百度一下之后大致原因是:scanf()函数在读取时不检查边界,所以可能会造成内存泄漏。有一定的安全隐患。例如代码是

char a;scanf("%c",&a);

scanf只有一个%c,rxddd输入两个以上的字符时,就会发生内存溢出。

微软公司觉得其不安全,所以在VS编译器中提供了scanf_s()函数,这是VS编译器特有的函数。强制用户提升安全性,如果想要在VS中使用scanf()函数,则可以通过以下四种方法解决。

三、解决方案 1、把scanf改成:scanf_s

把所有的scanf()改写成scanf_s(),但是scanf_s()是VS编译器特有的函数,写了此函数之后在别的编译器上就无法执行,使得代码的可移植性和跨平台性变得极差,不推荐使用。

2、关闭VS的SDL安全检查

点击应用确定之后,程序正常运行

3、在程序开头添加命令

在程序开头添加

#pragma warning(disable:4996)

或者

#pragma warning(once:4996)

可以看到,程序已经可以正确运行,即使警告提示还有。

4、添加宏定义

在项目文件开头添加宏定义,来忽略安全检查

#define _CRT_SECURE_NO_WARNINGS

或者

在预处理中编辑宏,相当于每次执行程序时,编译器自动帮你执行,省去了自己要在文件开头定义宏的麻烦

又或者

在VS2019安装路径找到 "newc++file.cpp" 这个文件,右键记事本打开,输入上面的 

#define _CRT_SECURE_NO_WARNINGS

命令,保存,这样以后每次新建.c++源文件的时候这行代码就会自动出现在第一行。

【注意】如果在保存的时候出现“拒绝访问”的情况,可以测试下载安装一个工具“Notepad++”,然后以管理员的身份运行这个软件,用这个软件打开上面提到的“newc++file.cpp”文件,复制粘贴代码上去后,保存即可。

一分快三技巧6)

可以看到,程序已经可以正确运行,即使警告提示还有。

4、添加宏定义

在项目文件开头添加宏定义,来忽略安全检查

#define _CRT_SECURE_NO_WARNINGS

或者

在预处理中编辑宏,相当于每次执行程序时,编译器自动帮你执行,省去了自己要在文件开头定义宏的麻烦

又或者

在VS2019安装路径找到 "newc++file.cpp" 这个文件,右键记事本打开,输入上面的 

#define _CRT_SECURE_NO_WARNINGS

命令,保存,这样以后每次新建.c++源文件的时候这行代码就会自动出现在第一行。

【注意】如果在保存的时候出现“拒绝访问”的情况,可以测试下载安装一个工具“Notepad++”,然后以管理员的身份运行这个软件,用这个软件打开上面提到的“newc++file.cpp”文件,复制粘贴代码上去后,保存即可。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。