VS2019中scanf返回值被忽略的问题及其解决方法

昨天在使用Visual Studio 2019编写C语言程序时遇到了scanf返回值被忽略问题

因为我也是刚开始学习C语言,第一次遇到这种问题,也不知道怎么回事,然后就上Chrome研究了一番,才知道原因,并且找到了几种分散在个个角落的解决方法,我在这里归纳总结一下。

问题原因:

在ANSI C中只有scanf(),没有scanf_s(),但是scanf()在读取时不检查边界,所以可能会造成内存泄漏。于是Microsoft公司在VS编译器中提供了scanf_s(),如果想继续使用scanf这个不安全的函数,可以通过以下方法解决。

方法①:

把scanf改成:scanf_s

这是VS编译器特有,既然觉得scanf()不安全,那它就自己定义了一个scanf_s()。

其实我是不推荐大家使用这种方法的,因为scanf_s它是vs编译器特有的,也就是说它不具有跨平台性/可移植性,在其他编译器上无法识别运行

方法②:

编译器错误提示的原因至于VS中的SDL检查,只需要找到它并关闭就可以了。

关闭步骤:右键“项目文件” —— “属性” —— “配置属性” ——“C/C++”——“常规”——“SDL检查”改为“否”即可,如图所示

改为否后,再次编译就没问题了。

方法③:

在C语言程序开头添加代码: #pragma warning(disable:4996)//全部关掉

(或者)

在C语言程序开头添加代码: #pragma warning(once:4996)//仅显示一个

方法④:

在C语言程序开头添加代码: #define _CRT_SECURE_NO_WARNINGS//忽略安全检测

每次都要加这么一串代码,是不是感觉有点费力??(我一开始找到这种方法的时候第一感觉也是这样的)

其实不用那么麻烦,这里还可以细分为两种方法:

(1)我们只需要在VS中加入 _CRT_SECURE_NO_WARNINGS 这个宏就可以了,具体操作如下图所示:

(2)在VS2019的安装路径下找到“newc++file.cpp”这个文件,用记事本的方式打开,并把这行代码复制粘贴上去,然后保存即可,这样以后每次新建.c源文件的时候这行代码就会自动出现在第一行。

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

最后提到的这两种都是一次搞定,后面都不用再弄了。

我个人偏向于方法④的第(1)种方法。我也比较推荐你使用这种方法——毕竟简单而且可以说是一劳永逸

到此这篇关于VS2019中scanf返回值被忽略的问题及其解决方法的文章就介绍到这了,更多相关VS2019 scanf返回值内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • VS2019提示scanf不安全问题的解决

    VS2019提示scanf不安全问题 我们现在学的就是使用scanf()语句进行输入,但是vs2019中却报错显示不安全 首先我先来说一下scanf和scanf-s的区别 scanf()函数是标准C中提供的标准输入函数,用以用户输入数据 scanf_s()函数是Microsoft公司VS开发工具提供的一个功能相同的安全标准输入函数,从vc++2005开始,VS系统提供了scanf_s().在调用该函数时,必须提供一个数字以表明最多读取多少位字符. scanf()在读取数据时不检查边界,所以可能会

  • VS2019中scanf返回值被忽略的问题及其解决方法

    昨天在使用Visual Studio 2019编写C语言程序时遇到了scanf返回值被忽略问题 因为我也是刚开始学习C语言,第一次遇到这种问题,也不知道怎么回事,然后就上Chrome研究了一番,才知道原因,并且找到了几种分散在个个角落的解决方法,我在这里归纳总结一下. 问题原因: 在ANSI C中只有scanf(),没有scanf_s(),但是scanf()在读取时不检查边界,所以可能会造成内存泄漏.于是Microsoft公司在VS编译器中提供了scanf_s(),如果想继续使用scanf这个不

  • VSstudio中scanf返回值被忽略的原因及解决方法(推荐)

    相信有不少人在使用vs的时候会遇到以下这个问题:scanf返回值被忽略,接下来我就告诉大家该如何解决这个问题 出现问题的原因: 因为scanf()在读取数据时不检查边界,所以可能会造成内存泄漏.Microsoft公司觉得这个函数不安全,于是自己在VS编译器中提供了scanf_s()这个函数,想解决以下这个问题有以下几种方法: 方法一(不推荐!): 将scanf改为scanf_s即可解决这个问题,效果如下所示: 虽然这种方法可行,但是在这里不推荐使用这种方式,因为编写程序要保证其有良好的可移植性,

  • ajax 返回值自动添加pre标签的解决方法

    ajax返回,自动添加pre标签 ajax返回的内容,居然自动添加了<pre>标签 在FF,ie,谷歌浏览器中,每个返回的都不一样:ff小写,ie大写,谷歌加style 查了一下,原来是返回的类型不对. 最终解决结果,修改一般处理程序的返回类型 把 context.Response.ContentType = "text/plain"; 修改为 context.Response.ContentType = "text/html";

  • C语言中带返回值的宏定义方式

    目录 C语言中带返回值的宏定义 宏定义编写 宏定义分析 宏定义验证 经验总结 C语言中一些宏定义和常用的函数 typeof 关键字 snprintf()函数的作用 __builtin_expect的作用 C语言中常用的预定义 反斜杠的作用 总结 C语言中带返回值的宏定义 相信大家在实际工作中,一定有遇到需要编写一个宏定义,且希望它能带返回值的场景吧? 比如我之前就遇到一个场景,早期的代码是使用函数实现的功能,现在想换成宏定义,但是又要保留之前调用函数的代码不动,这样我就只能想办法写一个带返回值的

  • C#中ExecuteNonQuery()返回值注意点分析

    本文实例讲述了C#中ExecuteNonQuery()返回值注意点.对于C#数据库程序设计有一定的借鉴价值.分享给大家供大家参考之用.具体分析如下: 首先,在查询某个表中是否有数据的时候,我们通常用ExecuteNonQuery(),并通过判断值是否大于0来判断数据的存在与否.结果与我所设想的很不一致,调试时才发现,其执行后返回的结果是-1,对此我很是不理解,回头查了下资料,如下显示: SqlCommand.ExecuteNonQuery 方法对连接执行 Transact-SQL 语句并返回受影

  • python从子线程中获得返回值的方法

    如下所示: # coding:utf-8 import time from threading import Thread def foo(number): time.sleep(20) return number class MyThread(Thread): def __init__(self, number): Thread.__init__(self) self.number = number def run(self): self.result = foo(self.number) d

  • python在回调函数中获取返回值的方法

    python中有用到回调函数的时候,而回调函数又需要返回数值的时候,就需要先将所被传为回调函数的函数先赋值给一个变量,然后等回调结束之后,将这个变量取值回来就可以了. 如我用到到的调用xmlreader时,传入的一个函数需要取回返回值的代码: # 创建一个 XMLReader parser = xml.sax.make_parser() # turn off namepsaces parser.setFeature(xml.sax.handler.feature_namespaces, 0) #

  • mybatis中insert返回值为1,但数据库却没有数据

    今天在利用Mybatis框架进行数据库插入时,遇到了好几个超级奇怪的问题,也可能是我真的太菜鸡了.做个记录吧~ 1. 排除数据库中表设置错误 使用show variables like '%autocommit%';查看表是否设置自动提交 autocommit已经设置为on,无问题 2. 检查测试类代码 Test.java import entity.Data; import org.apache.ibatis.io.Resources; import org.apache.ibatis.ses

  • C++中Covariant返回值类型详解

    目录 前言 什么是协变返回值类型(Covariant) 协变返回值类型(Covariant)的作用 前言 C++中当子类覆写(override)父类虚函数时,子类函数的返回值类型可以和父类函数的返回值类型不一致吗?先说结论:可以,但当且仅当它们的返回值类型是协变返回值类型(Covariant)时可以.C++中gcc从3.4开始支持这一特性. 什么是协变返回值类型(Covariant) 函数的协变返回值类型指的是子类中的成员函数的返回值类型不必严格等同与该函数所重写的父类中的函数的返回值类型,而可

  • angular4中*ngFor不能对返回来的对象进行循环的解决方法

    解决方法:可以循环返回的对象,得到对象里每一个key所对应的值,然后把值放到自己定义的一个数组中. 例如: tipAttr: any = []; $.each(response.ipCustomer.tip, function(key, val) { console.log(val); self.tipAttr.push(val); return self.tipAttr; }); 以上这篇angular4中*ngFor不能对返回来的对象进行循环的解决方法就是小编分享给大家的全部内容了,希望能给

随机推荐