【0】VS对不安全函数报错的解决方案

目录

0.前言

1.C语言:不安全函数     

2.报错原因分析

3.解决办法

3.1 预处理

3.1.1 程序第一行添加预处理

3.1.2 定义预处理器

3.2 取消安全检查

3.3 newc++file.cpp文件


0.前言

作为一个学习C语言的小白,难免遇到一些问题。有些问题可能在大佬面前很简单,但小白愣是照了百度做了一下午没弄出来,最后经过内心斗争,战战兢兢的在交流群里问出了自己的疑问,结果无非是没人回或者问度娘。同是小白,希望能将自己遇到的问题给别的小白帮助。

1.C语言:不安全函数     

VS编译器有时候会对C标准的一些函数报错,比如scanf、strcpy函数等等。例如

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZCs6aOO5ZC5562J5rWq6LW3,size_20,color_FFFFFF,t_70,g_se,x_16

报错信息:这个函数不安全,建议使用scanf_s代替。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZCs6aOO5ZC5562J5rWq6LW3,size_20,color_FFFFFF,t_70,g_se,x_16

像这种类似的_s函数都是VS编译器提供的,换言之,VS认为C中的部分函数不安全,就推荐使用自己的函数代替。使用VS的代替函数确实能够成功运行,但是有很多缺点,比如跨平台性不好,scanf_s这个函数在别的编译器就运行不了。在解决这个问题之前,考虑一下为什么这些C函数不安全。

2.报错原因分析

VS报错是有原因的,因为这些原本的C函数不够严谨,没有做安全检查。例如:

这个代码很简单,我们先忽略第一行的预处理。就是定义一个字符数组,用scanf将敲的内容输入到a的数组里。

C是没有字符串这个类型的,字符串存在字符数组里

但这个代码没有问题吗?显然不是,a定义的数组是5个大小,当输入过多的时候程序就崩溃了,这就是所谓的不安全函数

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZCs6aOO5ZC5562J5rWq6LW3,size_20,color_FFFFFF,t_70,g_se,x_16

3.解决办法

3.1 预处理

3.1.1 程序第一行添加预处理

在错误信息中,还有后面一段话的描述。如果让这个错误失效的话,使用_CRT_SECURE_NO_WARNINGS,所以最简单的方法就是在第一行加一个预处理。

#define _CRT_SECURE_NO_WARNINGS 1

就是定义_CRT_SECURE_NO_WARNINGS这个是1(真),这样就可以运行了。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZCs6aOO5ZC5562J5rWq6LW3,size_20,color_FFFFFF,t_70,g_se,x_16

3.1.2 定义预处理器

这个和添加在第一行是一样的,在项目-->属性-->C/C++-->预处理器-->预处理器定义(分号代表多个定义,将_CRT_SECURE_NO_WARNINGS复制进去)应用、确定即可,程序照样可以正常运行。 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZCs6aOO5ZC5562J5rWq6LW3,size_20,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZCs6aOO5ZC5562J5rWq6LW3,size_20,color_FFFFFF,t_70,g_se,x_16

3.2 取消安全检查

预处理方法确实简单,但缺点就是每次打开新的c文件就要在第一行添加。添加倒是不麻烦,主要是每次都要故意让VS提示出错,然后才能把错误信息中_CRT_SECURE_NO_WARNINGS复制过去,要不然谁记得住啊。

所以第二种方法就出现了,在C文件-->属性-->C/C++-->SDL检查(改为否就行),这种方法运行的时候程序会有警告,但是不影响运行。这种大概意思就是把VS的安全警告取消了。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZCs6aOO5ZC5562J5rWq6LW3,size_20,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZCs6aOO5ZC5562J5rWq6LW3,size_20,color_FFFFFF,t_70,g_se,x_16

3.3 newc++file.cpp文件

这个文件里面的内容会出现在每一次打开的c文件中,例如在文件里面输入“你好”,那么每次新建.c文件的时候就会在第一行出现“你好”,当然会有语法错误哈。所以我们只要在安装好VS后,将#define _CRT_SECURE_NO_WARNINGS 1 保存到这个文件中就可以了。

找到VS的安装位置,然后VC-->vcprojectitems-->newc++file.cpp(选择用记事本打开,将#define那一串复制保存就行了)

这里可能会有两个问题,第一个是找不到newc++file.cpp文件,这个文件是在安装位置的,可能我这么说有点像百度了。很简单,大部分人都会改安装路径,但是在D盘、F盘最起码知道吧。比如我是安装在D盘,直接搜索newc++file.cpp就行了。如图

当然很多人还是选择会去百度,按照里面网友的方法可能也会成功。有一种适合找路径的方法, 先在开始菜单里面找到VS,右击文件所在位置。

我用的是2017版本,再右击文件所在位置。

 

然后我的是在这个页面往上翻就找到了。找到VC这个文件夹就行了,然后VC-->vcprojectitems-->newc++file.cpp,复制保存OK。

找到newc++file.cpp已经成功一半了,第二个问题就是,保存不了,很多人可能会跳出下面这个错误框。 

这是因为权限不够导致的,可能还会有别的方法解决,比如下载别的编辑器等等,这我就不介绍了。为了方便,我们直接改权限就OK了。

在newc++file.cpp,右键属性,在点击安全

找到当前登录的用户名,点击编辑权限,改成完全控制就可以了。

这样保存退出,下一次登录VS,创建.c文件的时候,就会自动帮我们在第一行写入#define _CRT_SECURE_NO_WARNINGS 1  了

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

听风吹等浪起

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值