vs2019中scanf返回值被忽略_vs2017scanf

vs2019中scanf返回值被忽略_vs2017scanf一、问题再现如下是笔者在学习数据结构中的二叉树时遇到的问题:报错警告:返回值被忽略:”scanf”。二、问题分析百度一下之后大致原因是:scanf()函数在读取时不检查边界,所以可能会造成内存泄漏。有一定的安全隐患。微软公司觉得其不安全,所以在VS编译器中提供了scanf_s()函数,这是VS编译器特有的函数。强制用户提升安全性,如果想要在VS中使用scanf()函数,则可以通过一下4中方法解决。三、解决方案1、把scanf改成:scanf_s把所有的scanf()改

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

一、问题再现

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

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIxODkxODQz,size_16,color_FFFFFF,t_70

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

二、问题分析

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

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

Jetbrains全家桶1年46,售后保障稳定

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

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

三、解决方案

1、把scanf改成:scanf_s

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIxODkxODQz,size_16,color_FFFFFF,t_70

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

2、关闭VS的SDL安全检查

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIxODkxODQz,size_16,color_FFFFFF,t_70

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

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIxODkxODQz,size_16,color_FFFFFF,t_70

3、在程序开头添加命令

在程序开头添加

#pragma warning(disable:4996)

或者

#pragma warning(once:4996)

 

可以看到,程序已经可以正确运行,即使警告提示还有。watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIxODkxODQz,size_16,color_FFFFFF,t_70

4、添加宏定义

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

#define _CRT_SECURE_NO_WARNINGS

或者

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIxODkxODQz,size_16,color_FFFFFF,t_70

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

又或者

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIxODkxODQz,size_16,color_FFFFFF,t_70

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

#define _CRT_SECURE_NO_WARNINGS

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

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIxODkxODQz,size_16,color_FFFFFF,t_70

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

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/234268.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号