VS2019提示scanf不安全問題
我們現(xiàn)在學的就是使用scanf()語句進行輸入,但是vs2019中卻報錯顯示不安全
![](/d/20211017/7c9b53c3471b312857cc59935bbd98a1.gif)
首先我先來說一下scanf和scanf-s的區(qū)別
- scanf()函數(shù)是標準C中提供的標準輸入函數(shù),用以用戶輸入數(shù)據(jù)
- scanf_s()函數(shù)是Microsoft公司VS開發(fā)工具提供的一個功能相同的安全標準輸入函數(shù),從vc++2005開始,VS系統(tǒng)提供了scanf_s()。在調(diào)用該函數(shù)時,必須提供一個數(shù)字以表明最多讀取多少位字符。
- scanf()在讀取數(shù)據(jù)時不檢查邊界,所以可能會造成內(nèi)存訪問越界
//例如:分配了5字節(jié)的空間但是用戶輸入了10字節(jié),就會導致scanf()讀到10個字節(jié)
char buf[5]={'\0'};
scanf("%s", buf);
//如果輸入1234567890,則5以后的部分會被寫到別的變量所在的空間上去,從而可能會導致程序運行異常。
以上代碼如果用scanf_s()則可避免此問題:
char buf[5]={'\0'};
scanf_s("%s",buf,5); //最多讀取4個字符,因為buf[4]要放'\0'
//如果輸入1234567890,則buf只會接受前4個字符
對于解決這個報錯問題有幾個解決辦法
1.最簡單粗暴的
在使用vs2019時記住每次寫scanf時全都寫成scanf-s
2.在項目中進行屬性的更改
第一步:創(chuàng)建空項目
選擇創(chuàng)建新項目
![](/d/20211017/2f9cd188298bc4b26b0c2675f081da1a.gif)
選擇空項目進行創(chuàng)建
![](/d/20211017/5550b948bd978248eccd83d00d8b1b83.gif)
2.創(chuàng)建源文件
![](/d/20211017/360b16ee2be55954a0e41bc496cc8903.gif)
右擊
![](/d/20211017/0f19a0d13378380ce5702c4a3f1dca8c.gif)
![](/d/20211017/41072e986c3d0cd3d15ca8cba87f1384.gif)
添加c++文件
3.更改屬性
![](/d/20211017/0c333a1343463e3faa2e139b2dc4612e.gif)
右擊源.cpp
![](/d/20211017/bf0e0537b30d75212c8df6f25724840c.gif)
選擇屬性
![](/d/20211017/d999006fed3cd15b0eb8bb877764f54a.gif)
此時常規(guī)中的SDL選項現(xiàn)實的是“是 (/sdl)”
![](/d/20211017/098143676375f433922cda7ef00070c1.gif)
將此處改為“否 (/sdl-)”并確認即可
![](/d/20211017/6d975092bc28bf6ec5b4cf213d407715.gif)
此時雖然仍然會有警告出現(xiàn),但是已經(jīng)不影響程序的調(diào)試運行了,但是這個方法的缺點就是每一次創(chuàng)建新的c++文件的時候都要改一次屬性,比較麻煩。
第三個辦法:加宏
在最上面加上宏:
#define _CRT_SECURE_NO_WARNINGS 1
解除scanf的不安全問題;
到此這篇關(guān)于VS2019提示scanf不安全問題的解決的文章就介紹到這了,更多相關(guān)VS2019 scanf不安全內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- VS2019中scanf返回值被忽略的問題及其解決方法