为了账号安全,请及时绑定邮箱和手机立即绑定

关于C代码报不安全的时候怎么办?我是在vs2015中运行的,像c#中那样在语句前加unsafe{}不好使啊。

关于C代码报不安全的时候怎么办?我是在vs2015中运行的,像c#中那样在语句前加unsafe{}不好使啊。

C
超人7号 2016-02-04 05:21:12
报错信息:严重性 代码 说明 项目 文件 行 禁止显示状态错误 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. struc_ary c:\users\aaron\documents\visual studio 2015\projects\struc_ary\struc_ary\源.c 24原始代码#include<stdio.h>struct Student{ int id; char  name[10]; char sex; int age; float score; char addr[30];}; int main(void){ struct  Student sda[5] = { {1001,"xiaoming",'M',20,60.4,"chong qing" }, {1002,"nai lv",'M',23,90,"qingdao"}, {1003,"hong",'w',23,69,"henan"}, {1004,"arrm",'m',33,60,"hill lk" }, {1005,"qinyang",'m,',33,34,"jiao pi gou"}}; int id = 0; int n = 0; printf("please input  student id :"); scanf("%d", &id); for ( n = 0; n < 5; n++) { if (id==sda[n].id) { printf("%d,%s,%c,%d,%0.3f,%s\n", sda[n].id, sda[n].name, sda[n].sex, sda[n].age, sda[n].score, sda[n].addr); break; } } if (n==5) { printf("not found\n"); } getch(); return 0;}
查看完整描述

4 回答

已采纳
?
MadMarical

TA贡献79条经验 获得超122个赞

你好。你此时定义了一个id为int型,但是你的输入计算机是没法控制的。int型在内存中开辟的大小有限,你如果输入12345678919010101010010101010101010101010。如此大一串数,如果你进行了异常判断当然没问题,但是你没进行异常判断所以scanf会存在溢出风险,一旦发生溢出不处理,程序就会崩溃,这是为什么报错的原因。而scanf_s输入流则不同,它就是为了避免这种情况而诞生的,比如说输入char a[20] scanf_s("%s",a,20);这样一来,编译器就知道了这个输入长度最多为20,相当于帮你处理了异常。

以上是我的浅见,欢迎交流。

查看完整回答
2 反对 回复 2016-02-04
?
H1_Justin

TA贡献1条经验 获得超0个赞

#define _CRT_SECURE_NO_WARNINGS

查看完整回答
反对 回复 2016-02-04
  • 超人7号
    超人7号
    能详细解释一下你写的这个宏吗?不太懂
?
超人7号

TA贡献2条经验 获得超0个赞

我把scanf();换成scanf_s();就生成通过?我不理解为啥?

如果真的在c代码遇到提示代码不安全我应怎么做?求前辈指教啊

查看完整回答
反对 回复 2016-02-04
  • Ivoth
    Ivoth
    键项目是把安全检查的勾去掉
  • 4 回答
  • 0 关注
  • 12023 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信