常見報錯:如何解決 vs 編譯器scanf函數(shù)報錯問題?
問題來源
當我們使用vs編譯器編譯c語言代碼,并需要用到一些非常常用的庫函數(shù)的時候(如scanf)
vs編譯器通常會報出如下錯誤:

有的時候即便報錯了,程序也可以正常運行;
但有的時候就會同圖中一樣,程序無法運行;
出現(xiàn)這個錯誤的原因是vs編譯器認為這些庫函數(shù)是“不安全的”(我可真謝謝你,擔duo心guan那xian么shi多,微軟)
解決方法
解決這個報錯問題的方法有兩種
1.使用_S下標
如圖所示,我們可以在庫函數(shù)后面加一個_s,這時候vs就會把它認為是“安全的函數(shù)”,程序就可以正常運行了

方法一的致命缺點:
但是這么做有一個非常大的弊端——該代碼只能在vs編譯器里運行
如圖,如果我們將這一串帶_S的代碼復制到**devc++**這款編譯器里面
devc++編譯器會報錯,無法運行這串代碼

同樣的,如果你需要在mooc、??途W(wǎng)或者其他刷題網(wǎng)站上填寫代碼的時候
系統(tǒng)也無法運行這種帶了_s的c語言代碼
這時候代碼的“可移植性” (即通用性)就變差了!
這時候就需要我們的解決方法2了
2.使用防報錯語句
只需要在這個源文件的第一行添加這樣一串代碼
#define _CRT_SECURE_NO_WARNINGS 1
這串代碼的作用就是屏蔽掉vs編譯器對函數(shù)危險性的排查報錯
如圖所示,我們的代碼就能正常運行了

這樣操作,即便是將這一行防報錯代碼移植到另外一個編譯器里,這串代碼仍然能正常運行
而且有的時候即便加上_s,還是會出現(xiàn)一些和scanf無關的奇怪報錯
使用方法二就能解決這個問題,這里建議大家還是使用方法二啦!

方法二的缺點?
你可能會說,那我豈不是每次寫代碼之前都需要打上這么一個define語句,那樣也太麻煩了吧!
再說了,我也背不下來?。?/p>
別急,下面我就會告訴你怎么讓vs編譯器每次創(chuàng)建源文件的時候自動帶上這么一串代碼
如何在vs編譯器里加上默認語句
這里我們需要用到另外一款同樣很經(jīng)典的軟件——Notepad++

安裝完成后,我們點擊左上角的 文件
打開如下路徑里,箭頭所指的new++file文件

vs編譯器默認安裝路徑是c盤
如果你的vs編譯器不在c盤,可以通過右鍵桌面vs編譯器的快捷方式,打開文件所在的位置,找到你vs編譯器的安裝路徑

打開以后是空白的
我們只需要講這行define語句加入這個文件,ctrl+s保存
由于vs編譯器處于c盤,修改這個文件需要申請管理員權限,點擊同意即可!
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
這時候你創(chuàng)建的新的源文件,就會默認帶上這串代碼啦!
由于<stdio.h>這個頭文件實在是太常用了,所以我把它也加入了這個文件里。
如果你愿意,也可以把int main()加入這個文件,方法同上

這樣就不用每次創(chuàng)建新的源文件的時候自己手打啦!
一勞永逸!
-----------------------------------
寫在最后:另外,對于準備學習C/C++編程的小伙伴,如果你想更好的提升你的編程核心能力(內(nèi)功)不妨從現(xiàn)在開始!
微信公眾號:C語言編程學習基地
整理分享(多年學習的源碼、項目實戰(zhàn)視頻、項目筆記,基礎入門教程)
歡迎轉(zhuǎn)行和學習編程的伙伴,利用更多的資料學習成長比自己琢磨更快哦!
編程學習書籍分享:

粉絲編程交流:
