解决c语言中调用scanf()或者strcpy()函数报错问题

简介: 解决c语言中调用scanf()或者strcpy()函数报错问题

引言



最近在使用VS实现C语言程序的时候经常会遇到一些错误,但是这些函数的确是可以正确使用的,可能在vc++6.0上就可以正常运行,很多参考书的代码都是以vc++6.0为标准的代码,所以这样我们在实现demo的时候会花费一下时间在没有必要的错误上面,下面就给大家介绍一些解决方案。


问题重现


error C4996: 'scanf': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT


20161124184308877.png

错误原因


这是因为scanf这个函数是个不安全的函数,可能会造成缓冲区的益出;


官方解读原因


“function”: 也被声明为否决 的 “std::<函数名>”: 具有可能不安全的参数的函数调用 - 此调用依靠调用方检查传递的值是否正确。若要禁用此警告,请使用 -D_SCL_SECURE_NO_WARNINGS。请参阅有关如何使用 Visual C++“经过检查的迭代器”的文档


此警告/错误有许多可能的含义。


C4996 可能会发生,因为编译器遇到了标记有 deprecated 的函数。在未来版本中可能不再支持此函数。可以用 warning 杂注关闭此警告。


为了支持新的、更安全的函数,否决了某些 CRT 和标准 C++ 库函数。有关要改用的函数的更多信息,请参见错误消息中被否决的函数的文档。若要关闭 CRT 否决警告,请定义 _CRT_SECURE_NO_WARNINGS。有关不推荐使用的函数的更多信息,请参见 CRT 中的安全功能和安全库:C++ 标准库。


如果你在 std 命名空间中使用 <hash_map> 和 <hash_set> 头文件的成员,你将会看到 C4996。有关更多信息,请参见 stdext 命名空间。



如果出于安全原因使用了否决的 MFC 或 ATL 函数,也可能发生 C4996。若要取消这些警告,请参见 _AFX_SECURE_NO_WARNINGS 和_ATL_SECURE_NO_WARNINGS。



在使用封送处理库时也可能会发生 C4996。在这种情况下,C4996 是错误,而非警告。使用 marshal_as 在需要 marshal_context 类的两种数据类型之间进行转换时,将发生此错误。如果封送处理库不支持转换,您也会收到此错误。有关封送处理库的更多信息,请参见 C++ 中的封送处理概述。


解决方案


1、在新建项目的时候不要勾选安全开发生命周期检查


2、按照提示将strcpy换成strcpy_s


3、在文件开头加上  #define _CRT_SECURE_NO_WARNINGS


上面三种方法不是很好的解决方案,因为在有的代码中会引发新的错误 最好的解决方法


1、每次调用strcpy函数时在文件开头 加上#pragma warning(disable:4996)。此方法比较直接有效。


2、右击项目名称——选择属性——C/C++——选择预处理——点击编辑——添加_CRT_SECURE_NO_WARNINGS

20161124190650818.png


20161124190801327.png


上面问题可以永久解决问题。


小结


当我们遇到问题的时候,找到一种最好的的解决问题是明智的选择,希望能帮助广大读者。

目录
相关文章
|
6天前
|
Java C语言 C++
定义C语言的int main()函数
定义C语言的int main()函数
|
7天前
|
存储 移动开发 C语言
技术心得记录:嵌入式开发中常用到的C语言库函数
技术心得记录:嵌入式开发中常用到的C语言库函数
|
4天前
|
Java C语言 C++
定义C语言的int main()函数
定义C语言的int main()函数
|
7天前
|
Java 程序员 Linux
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
13 0
|
7天前
|
C语言
C语言实现猜数字游戏:代码详解与函数解析
C语言实现猜数字游戏:代码详解与函数解析
10 0
|
7天前
|
程序员 C语言
C语言内存管理:malloc、calloc、realloc与free函数详解
C语言内存管理:malloc、calloc、realloc与free函数详解
8 0
|
8天前
|
C语言
C语言中的函数指针、指针函数与函数回调
C语言中的函数指针、指针函数与函数回调
7 0
|
2月前
|
存储 C语言
C 语言函数完全指南:创建、调用、参数传递、返回值解析
函数是一段代码块,只有在被调用时才会运行。 您可以将数据(称为参数)传递给函数。 函数用于执行某些操作,它们对于重用代码很重要:定义一次代码,并多次使用。
111 3
|
11天前
|
存储 C语言
C语言的函数返回值和指针
C|函数返回值(区分各类值)和指针(区分各类存储空间)的细节
|
2月前
|
存储 C语言
C语言中向函数传递值和从函数返回值的技术解析
C语言中向函数传递值和从函数返回值的技术解析
28 0