我的C语言学习进阶之旅解决 Visual Studio 2019 报错:错误 C4996 ‘fscanf‘: This function or variable may be unsafe.(代码片段
Posted 欧阳鹏
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的C语言学习进阶之旅解决 Visual Studio 2019 报错:错误 C4996 ‘fscanf‘: This function or variable may be unsafe.(代码片段相关的知识,希望对你有一定的参考价值。
一、问题描述
今天在Visual Studio 2019中写一段C语言的代码,发生生成错误。弹框如下:
点击【否(N)】,提示如下:
错误具体信息为:
错误 C4996 'fscanf': This function or variable may be unsafe.
Consider using fscanf_s instead.
To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
See online help for details.
二、解决问题
2.1 使用fscanf_s函数替代fscanf函数
如上面的错误提示,
错误 C4996 'fscanf': This function or variable may be unsafe.
Consider using fscanf_s instead.
我们可以使用fscanf_s
函数替代fscanf
函数。 没啥好说的,按照提示来,一个一个改。
但是这个解法也有局限,因为:scanf函数是C语言提供的,而scanf_s不是标准C语言提供的,而是VS编译器提供的,只有VS这个编译器能识别出来,当我们换个编译器时(譬如:GCC),那么GCC就不认识scanf_s这个东西了,此时,代码就不满足跨平台性(可移植性)!
2.2 在代码顶部加入一行:#define _CRT_SECURE_NO_WARNINGS
这样在代码顶部加入一行:#define _CRT_SECURE_NO_WARNINGS
之后就可以成功编译运行!
2.3 在代码顶部加入一行: #pragma warning(disable:4996)
在代码顶部加入一行: #pragma warning(disable:4996)
,其中4996对应的错误代码 C4996
,如下所示:
这样加入之后,也是可以成功编译运行!
2.4 在预处理定义中加入宏定义_CRT_SECURE_NO_WARNINGS
如同2.2的方法,我们可以不在文件中添加,直接在预处理定义中加入宏定义_CRT_SECURE_NO_WARNINGS
- 选择【解决方案资源管理器】····>【项目属性】
- 然后选择【配置属性】–>【C/C++】–> 预处理器
- 编辑【预处理器定义】
选择【预处理器定义】最右边的下拉框(下拉箭头),然后选择编辑
- 加入宏定义
_CRT_SECURE_NO_WARNINGS
加入宏定义 _CRT_SECURE_NO_WARNINGS
5. 点击【确定】
6. 重新编译运行
把2.2 和 2.3 的方法注释掉,也可以成功编译运行!
2.5 禁用特定警告
这个方法对应的 2.3 在代码顶部加入一行: #pragma warning(disable:4996)
打开【项目属性】→【C/C++】→【高级】→【禁用特定警告】
然后填上这个错误对应的C4996编号就好了,这个项目就都不会再显示这个错误了。
这样也是可以正常编译运行的!
2.6 关闭 SDL checks
真正原因在与vs中的SDL检查。
于是可以:右键单击工程文件–>属性(最后一个)--------> c/c++ ------>SDL checks ------------> no.
- 选择【解决方案资源管理器】····>【项目属性】
- 然后选择【配置属性】–>【C/C++】–> 常规
3. 选择【SDL检查】,关闭它
选择【否】,然后保存。
4. 恢复2.4 加入预处理器定义,如下所示:
这样,我们即使没有2.4的方法 也是可以正常编译运行!
三、总结一下
方法多种多样,
- 使用fscanf_s函数替代fscanf函数
- 在代码顶部加入一行:
#define _CRT_SECURE_NO_WARNINGS
- 在代码顶部加入一行:
#pragma warning(disable:4996)
- 在预处理定义中加入宏定义
_CRT_SECURE_NO_WARNINGS
- 禁用特定警告
- 关闭 SDL checks
推荐使用方法4,这样可以一劳永逸。
其他 方法2和方法4对应,方法3和方法5对应。
以上是关于我的C语言学习进阶之旅解决 Visual Studio 2019 报错:错误 C4996 ‘fscanf‘: This function or variable may be unsafe.(代码片段的主要内容,如果未能解决你的问题,请参考以下文章
我的C语言学习进阶之旅Visual Studio 2019 注释与取消注释快捷键
我的C语言学习进阶之旅Visual Studio 2019 注释与取消注释快捷键以及格式化代码
我的C语言学习进阶之旅Visual Studio 2019的代码智能提示快捷键是啥?
我的C语言学习进阶之旅Visual Studio 2019的代码智能提示快捷键是啥?
我的C语言学习进阶之旅关于C/C++内存对齐读取文件产生的问题以及解决方法
我的C/C++语言学习进阶之旅解决使用ninja命令的时候报错:ninja: error: loading ‘build.ninja‘: 系统找不到指定的文件。