VS2019提示scanf不安全問題的解決
VS2019提示scanf不安全問題
我們現在學的就是使用scanf()語句進行輸入,但是vs2019中卻報錯顯示不安全
首先我先來說一下scanf和scanf-s的區別
- scanf()函數是標準C中提供的標準輸入函數,用以用戶輸入數據
- scanf_s()函數是Microsoft公司VS開發工具提供的一個功能相同的安全標準輸入函數,從vc++2005開始,VS系統提供瞭scanf_s()。在調用該函數時,必須提供一個數字以表明最多讀取多少位字符。
- scanf()在讀取數據時不檢查邊界,所以可能會造成內存訪問越界
//例如:分配瞭5字節的空間但是用戶輸入瞭10字節,就會導致scanf()讀到10個字節 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.在項目中進行屬性的更改
第一步:創建空項目
選擇創建新項目
選擇空項目進行創建
2.創建源文件
右擊
添加c++文件
3.更改屬性
右擊源.cpp
選擇屬性
此時常規中的SDL選項現實的是“是 (/sdl)”
將此處改為“否 (/sdl-)”並確認即可
此時雖然仍然會有警告出現,但是已經不影響程序的調試運行瞭,但是這個方法的缺點就是每一次創建新的c++文件的時候都要改一次屬性,比較麻煩。
第三個辦法:加宏
在最上面加上宏:
#define _CRT_SECURE_NO_WARNINGS 1
解除scanf的不安全問題;
到此這篇關於VS2019提示scanf不安全問題的解決的文章就介紹到這瞭,更多相關VS2019 scanf不安全內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- None Found