第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > c语言——程序出现C4996:scanf 等错误的解决方法

c语言——程序出现C4996:scanf 等错误的解决方法

时间:2020-01-16 03:25:54

相关推荐

c语言——程序出现C4996:scanf 等错误的解决方法

c语言——程序出现C4996:scanf 等错误的解决方法(不用scanf_s替换解决)

问题实例解决方法方法1方法2

在VS编译器下,编写的c语言程序在调试编译时可能会出现c4996警告或错误此类的反馈信息,在此根据自己的实践经验总结出了几个可以解决此类问题的方法。以下通过具体的例子进行叙述。

问题实例

下面展示一段简单的代码`:

int main(){int age = 0;printf("请输入你的年龄:>");scanf("%d",&age);printf("你输入的年龄是:%d\n",age);return 0;}

调试运行出现错误或警告提示:

1>------ 已启动生成: 项目: test, 配置: Debug Win32 ------1> test.c1>h:\c c++学习\classcode\test\test\test.c(24): error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.1> c:\program files (x86)\windows kits\10\include\10.0.10150.0\ucrt\stdio.h(1270): note: 参见“scanf”的声明========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

提示中说到用scanf_s去替换scanf可以解决问题,因此根据提示将代码中的scanf替换为scanf_s,调试后结果为:

1>------ 已启动生成: 项目: test, 配置: Debug Win32 ------1> test.c1> test.vcxproj -> H:\C C++学习\ClassCode\test\Debug\test.exe========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========

可见这种方法确实可以解决问题。

但是,实际上scanf是c语言提供的函数,防范使用大多数的编译器,而scanf_s这个函数只是VS编译器提供的一个它自身认为安全的一个版本,在其他编译器下不一定适用,不建议使用。

解决方法

方法1

在报错的提示中提到:

To disable deprecation, use _CRT_SECURE_NO_WARNINGS.

因此,源程序的最开头(头文件之前)加上一句代码:

#define _CRT_SECURE_NO_WARNINGS 1

调试编译后,问题解决:

1>------ 已启动生成: 项目: test, 配置: Debug Win32 ------1> test.c1> test.vcxproj -> H:\C C++学习\ClassCode\test\Debug\test.exe========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========

为了避免在每次编写程序是都要认为地去添加上述一行代码,以下提供了使建立添加生成的源文件自动生成上述一行代码的方法:

自己安装的visual studio 路径--------->找到Microsoft Visual Studio 14.0并点击------->点击VC---------->点击vcprojectitems----------->右击new++file.cpp,用Notepad++打开--------->在文件中添加#define _CRT_SECURE_NO_WARNINGS 1并保存。以后新建的**.c文件只能够都会出现上述代码,可解决c4996出现的scanf、strcpy、strcat此类函数警告或报错的问题。

方法2

与方法1类似,在头文件之前添加以下一行代码也可解决问题:

#pragma warning(distable:4996)

若想让新建的.c文件自动出现上述一行代码,方法参看方法1中的方法过程。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。