C++:C4996报错解决方法

C++: C4996报错

我的博客:竹山听雨

问题描述

  • 环境:V2019
  • 语言:C++
    还是在完成学校作业的时候(ps:好像原来也遇到过很多次了),在VS201x编译器上,使用scanf(),strcpy()等,都会出现这个问题。
    C++:C4996报错解决方法
    严重性 代码 说明 项目 文件 行 禁止显示状态 错误 C4996 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

问题出现原因

创建项目时,会有一个勾选项,叫做"安全开发生命周期(SDL)检查",为了更好的监管开发者的代码安全,如果勾选,他将严格按照SDL的规则编译代码,因此一些常用的函数,如scanf等就会报错C4996

解决方法

使用安全的函数

scanf()改为scanf_s().strcpy()改为strcpy_s()等。这个方法适合长期解决问题,因为scanf等函数的确会对程序造成一些不良影响,但是有些安全函数,如:strcpy_sstrcpy原版函数的参数好像不同,对初学者,仅仅是做一个demo来说,可能会有新的bug

添加宏

选择项目——>xxxx(你的项目名称)属性——>C++——>预处理器——>预处理器定义

在定义后面添加_CRT_NONSTDC_NO_DEPRECATE_CRT_SECURE_NO_WARNINGS

保存重新编译即可

**注意:**要记得每个定义后面要以;隔开
C++:C4996报错解决方法
C++:C4996报错解决方法
这样的方法在本项目中,都会忽略这些报错,但是可能会有些麻烦

添加#define EXAMPLE_MACRO_NAME

若要仅在特定源文件中定义的宏,请添加一个行如#define EXAMPLE_MACRO_NAME包含的头文件的任意行之前

可能有些时候这个方法没用,暂时不清楚原因

添加#pragma warning(disable:4996)

这个可能是最简单粗暴的解决方法,直接忽略掉C4996这个报错

在文件首添加#pragma warning(disable:4996)即可,但是也仅对当前源文件有效

结语

若有哪里不对,敬请大佬指正