C语言程序调试成功0失败0,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.c

1>h:\2020c 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.c

1> test.vcxproj -> H:\2020C 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.c

1> test.vcxproj -> H:\2020C 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中的方法过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值