亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于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 關注
  • 12083 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號