報錯信息:嚴重性 代碼 說明 項目 文件 行 禁止顯示狀態錯誤 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 關注
- 12083 瀏覽
添加回答
舉報
0/150
提交
取消