报错信息:严重性 代码 说明 项目 文件 行 禁止显示状态错误 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,相当于帮你处理了异常。
以上是我的浅见,欢迎交流。
- 4 回答
- 0 关注
- 12023 浏览
添加回答
举报
0/150
提交
取消