VisualStudio2019解決scanf函數(shù)報錯問題
一、問題由來
在 Visual Studio 2019 編輯代碼時,前期剛剛接觸到VS編譯器時存在的困惑,當(dāng)用scanf()
函數(shù),進(jìn)行輸入時,在運行的時候編譯器會出現(xiàn)警告報錯。如下圖情況
二、為何會存在這個問題
在Visual Studio 2019中,scanf函數(shù)會被標(biāo)記為不安全的函數(shù),因為它沒有檢查輸入緩沖區(qū)的大小。如果輸入緩沖區(qū)不夠大,scanf函數(shù)可能會導(dǎo)致緩沖區(qū)溢出,從而引發(fā)安全漏洞。
三、解決方法
方法1(scanf_s)不推薦
為了避免這個問題, VS編譯器中可以使用scanf_s
函數(shù)代替scanf
。scanf_s函數(shù)具有相同的參數(shù)和行為,但添加了一個額外的參數(shù),用于指定輸入緩沖區(qū)的大小。例如,要讀取一個整數(shù),您可以這樣使用scanf_s函數(shù):
int num; if (scanf_s("%d", &num) != 1) { // scanf_s失敗,處理錯誤 }
注意:如果您還想使用scanf函數(shù)而不是scanf_s函數(shù),請在項目的屬性中啟用“CrtSecureWarnings”選項,該選項將禁用scanf函數(shù)的警告。
方法2(#define _CRT_SECURE_NO_WARNINGS 1)推薦
在文件的最頂端輸入以下代碼
#define _CRT_SECURE_NO_WARNINGS 1
注意一定得是文件最開頭的地方 !!!
因為在編程時常常會使用到 scanf
函數(shù),為了解決每次編程時都需要在開頭寫這條會很繁瑣
以下是解決方法
在新建.c文件時自帶 #define _CRT_SECURE_NO_WARNINGS 1
先下載這個軟件 旁邊是 Everything官網(wǎng)地址
運行Everything,在搜索框里查找這個文件 newc++file.cpp
右擊打開路徑
復(fù)制該文件到桌面,用vs2019打開進(jìn)行修改
將這段代碼 #define _CRT_SECURE_NO_WARNINGS 1
復(fù)制到文件中
將這個文件保存到步驟4.的路徑中,替換本來的文件
這樣就在新建文件時,就有這行代碼啦
總結(jié)
在學(xué)習(xí)C語言的初期,經(jīng)常遇到scanf函數(shù)報錯問題,建議使用方法2,方法1的scanf_s是在VS編譯器中有,使用時如果在其他編譯器運行時可能會出錯,所以建議使用方法2,#define _CRT_SECURE_NO_WARNINGS 1
到此這篇關(guān)于VisualStudio2019解決scanf函數(shù)報錯問題的文章就介紹到這了,更多相關(guān)VS2019 scanf報錯內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++實現(xiàn)當(dāng)前時間動態(tài)顯示的方法
這篇文章主要介紹了C++實現(xiàn)當(dāng)前時間動態(tài)顯示的方法,涉及C++時間操作及Sleep方法的使用,具有一定參考借鑒價值,需要的朋友可以參考下2015-07-07基于matlab對比度和結(jié)構(gòu)提取的多模態(tài)解剖圖像融合實現(xiàn)
這篇文章主要介紹了多模態(tài)醫(yī)學(xué)圖像配準(zhǔn)與融合的概念、方法及意義,最后簡單介紹了小波變換分析方法。感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2021-11-11如何判斷一個數(shù)是否為4的冪次方?若是,并判斷出來是多少次方?
本篇文章是對如何判斷一個數(shù)是否為4的冪次方?若是,并判斷出來是多少次方的實現(xiàn)方法,進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C語言數(shù)據(jù)結(jié)構(gòu)之圖的遍歷實例詳解
這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)之圖的遍歷實例詳解的相關(guān)資料,需要的朋友可以參考下2017-07-07C語言實現(xiàn)賓館管理系統(tǒng)課程設(shè)計
這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)賓館管理系統(tǒng)課程設(shè)計,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03