相信有不少人在使用vs的时候会遇到以下这个问题:scanf返回值被忽略,接下来我就告诉大家该如何解决这个问题
出现问题的原因:
因为scanf()在读取数据时不检查边界,所以可能会造成内存泄漏。Microsoft公司觉得这个函数不安全,于是自己在VS编译器中提供了scanf_s()这个函数,这个函数提供了边界限制。想解决这个报错异常有以下几种方法:
方法一(不推荐!):
将scanf改为scanf_s即可解决这个问题,效果如下所示:
虽然这种方法可行,但是在这里不推荐使用这种方式,因为编写程序要保证其有良好的可移植性,scanf_s这个函数是Microsoft自己定义的,在ANSI C中只有scanf(),没有scanf_s(),所以如果跨平台移植的话代码很可能会报错,找不到scanf_s这个函数,在移植时需要更改,这样的代码就失去了良好的可移植性,所以不做推荐。
方法二(推荐):
在代码的第一行加入这句话:
#define _CRT_SECURE_NO_WARNINGS 1
这句话的意思是代码不进行SDL安全检查,这样就不会报错了,但是细心的人会发现,代码还是会有警告
显然作为一个合格的程序员我们是不容许任何一个警告的,在这里我也为大家提供了解决办法:
再加入这句话
#pragma warning(disable:6031)
这样就会忽略6031这个警告
现在我们的代码就非常的完美了。
但是可能还有人问了,每次都这么添加不是很麻烦吗?所以这里我为大家提供了一劳永逸的方法:
打开VS安装路径下的这个文件:
D:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\VC\VCProjectItems
不同版本的路径也会有所不同,我这里是VS2022的路径,不同版本的路径可能不同,但是文件名是一样的,所以可以选择在文件夹中搜索newc++file.cpp这个文件。
打开文件后我们将这两句话复制进去后并且保存
#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
如下:
这样之后我们创建一个新的.c文件它就会自动书写在文件的开头了。
以上就是关于scanf返回值被忽略的原因及其解决方法的所有内容了。
2022-11-07
有好些人私信反应说 newc++file.cpp
这个文件不能修改,或者没有管理员权限修改,要么是就是修改后不能保存,这里是我疏忽了,我在我这里演示两种修改并保存的方法:
第一种:编辑器,如NotePad++
使用NotePad++打开,进行更改后会有这个提示,选择管理员模式启动NotePad++即可保存更改,这个软件是免费的,平时查看代码等也挺好用的,大家可以下载一个试试:官方下载地址
如果不想额外下载软件的话,可以看方法二
方法二:修改用户本身对这个文件的操作权限
右击文件选择最底下的属性,然后切换到安全,选择Users用户(因为我们登录电脑时的身份是普通用户,并不是管理员)之后点击编辑
选中Users用户,将他的权限改为完全控制即可
这样的话我们就对这个文件拥有了修改的权限,这样即使我们使用记事本打开,也不会提示我们无法无法修改,或者修改无法保存等。