4 回答

TA貢獻(xiàn)79條經(jīng)驗(yàn) 獲得超122個(gè)贊
你好。你此時(shí)定義了一個(gè)id為int型,但是你的輸入計(jì)算機(jī)是沒(méi)法控制的。int型在內(nèi)存中開(kāi)辟的大小有限,你如果輸入12345678919010101010010101010101010101010。如此大一串?dāng)?shù),如果你進(jìn)行了異常判斷當(dāng)然沒(méi)問(wèn)題,但是你沒(méi)進(jìn)行異常判斷所以scanf會(huì)存在溢出風(fēng)險(xiǎn),一旦發(fā)生溢出不處理,程序就會(huì)崩潰,這是為什么報(bào)錯(cuò)的原因。而scanf_s輸入流則不同,它就是為了避免這種情況而誕生的,比如說(shuō)輸入char a[20] scanf_s("%s",a,20);這樣一來(lái),編譯器就知道了這個(gè)輸入長(zhǎng)度最多為20,相當(dāng)于幫你處理了異常。
以上是我的淺見(jiàn),歡迎交流。

TA貢獻(xiàn)2條經(jīng)驗(yàn) 獲得超0個(gè)贊
我把scanf();換成scanf_s();就生成通過(guò)?我不理解為啥?
如果真的在c代碼遇到提示代碼不安全我應(yīng)怎么做?求前輩指教啊
- 4 回答
- 0 關(guān)注
- 12081 瀏覽
添加回答
舉報(bào)