詳解VS2019使用scanf()函數(shù)報(bào)錯(cuò)的解決方法
首先來(lái)看一段很簡(jiǎn)單的C語(yǔ)言代碼
#include<stdio.h> int main(void) { char s[10]; scanf("%s",s); printf("%s",s); return 0; }
這段代碼的作用就是輸入一個(gè)字符串,再把這個(gè)字符串輸出。在其他IDE(集成開(kāi)發(fā)環(huán)境)上,是完全可以運(yùn)行的,但是在Microsoft Visual Studio(美國(guó)微軟公司開(kāi)發(fā)的可視化編程開(kāi)發(fā)軟件)的系列軟件上(從Microsoft Visual C++ 2005開(kāi)始),Microsoft Visual Studio系列軟件直接使用scanf()函數(shù)會(huì)報(bào)錯(cuò),但是也提供了一個(gè)叫scanf_s()新格式化輸入函數(shù)。
scanf_s()函數(shù)
在調(diào)用scanf_s()函數(shù)時(shí),必須在可變參數(shù)表中提供一個(gè)數(shù)字來(lái)表明最多讀取多少個(gè)字節(jié)的字符,另外很多額外帶_s后綴的函數(shù)是為了讓原版函數(shù)更安全,傳入一個(gè)和參數(shù)有關(guān)的大小值,避免訪問(wèn)到不存在的元素。
所以上面那段代碼在VS2019里要這樣寫(xiě):
#include<stdio.h> int main() { char s[10]; scanf_s("%s",s,10); printf("%s",s); return 0; }
scanf_s("%s", a,10);表示用戶最多可以最多輸入9個(gè)字符,這種情況程序可以正常編譯運(yùn)行,如果用戶輸入字符超過(guò)9個(gè),程序運(yùn)行結(jié)果就會(huì)出錯(cuò)。scanf_s()函數(shù)的可變參數(shù)表里的10表示可以輸入9個(gè)字符,因?yàn)閟[9]里要存放'\0'字符。
scanf_s()函數(shù)與scanf()函數(shù)的區(qū)別
scanf() 函數(shù) :是標(biāo)準(zhǔn)格式化輸入函數(shù),它從標(biāo)準(zhǔn)輸入設(shè)備(鍵盤(pán))讀取輸入的信息。其調(diào)用格式為:scanf("
scanf_s()函數(shù):是針對(duì)scanf()函數(shù)在讀取字符串時(shí)不檢查邊界,可能會(huì)造成內(nèi)存泄露這個(gè)問(wèn)題設(shè)計(jì)的。scanf_s()函數(shù)用于讀取字符串時(shí),必須提供一個(gè)數(shù)字以表明最多讀取多少位字符,以防止溢出。
scanf()函數(shù)和scanf_s()函數(shù)在整數(shù)、浮點(diǎn)數(shù)、單個(gè)字符等輸入情況下基本功能相同。 兩者的主要區(qū)別在于字符串的輸入。
VS2019使用scanf()函數(shù)報(bào)錯(cuò)的解決方法
如果我們?cè)赩S2019環(huán)境下直接使用scanf()函數(shù),程序會(huì)產(chǎn)生以下報(bào)錯(cuò):
解決方法一
使用scanf_s()函數(shù)來(lái)代替scanf()函數(shù)。
解決方法二
點(diǎn)VS2019軟件上方的工具→打開(kāi)項(xiàng)目→打開(kāi)屬性頁(yè)→打開(kāi)配置屬性→打開(kāi)C/C++→在預(yù)處理器中添加_CRT_SECURE_NO_WARNINGS,點(diǎn)擊確定。
解決方法三
在代碼最最上面加入一句宏定義:#define _CRT_SECURE_NO_WARNINGS。
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() { char s[10]; scanf("%s",s); printf("%s",s); return 0; }
解決方法四
在代碼最最上面加入一句代碼:#pragma warning(disable:4996),作用是忽略此警告
#pragma warning(disable:4996) #include<stdio.h> int main() { char s[10]; scanf("%s", s); printf("%s",s); return 0; }
到此這篇關(guān)于詳解VS2019使用scanf()函數(shù)報(bào)錯(cuò)的解決方法的文章就介紹到這了,更多相關(guān)VS2019 scanf()報(bào)錯(cuò)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Matlab處理圖像后實(shí)現(xiàn)簡(jiǎn)單的人臉檢測(cè)
本文主要介紹一下如何使用matlab進(jìn)行圖像處理后實(shí)現(xiàn)人臉檢測(cè),感興趣的可以了解一下2021-11-11C語(yǔ)言實(shí)現(xiàn)電子郵件地址驗(yàn)證程序
這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)電子郵件地址驗(yàn)證程序,利用的是POSIX正則表達(dá)式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-11-11C?語(yǔ)言中布爾值的用法實(shí)戰(zhàn)案例
這篇文章主要為大家介紹了C語(yǔ)言中布爾值的用法實(shí)戰(zhàn)案例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12C/C++代碼操作MySQL數(shù)據(jù)庫(kù)詳細(xì)步驟
這篇文章主要給大家介紹了關(guān)于C/C++代碼操作MySQL數(shù)據(jù)庫(kù)的相關(guān)資料,通過(guò)文中的這些示例,我們可以連接到MySQL數(shù)據(jù)庫(kù),并執(zhí)行常見(jiàn)的數(shù)據(jù)庫(kù)操作,如創(chuàng)建表、插入數(shù)據(jù)和查詢數(shù)據(jù),需要的朋友可以參考下2023-12-12Qt5.9實(shí)現(xiàn)簡(jiǎn)單復(fù)合圖形
這篇文章主要為大家詳細(xì)介紹了Qt5.9實(shí)現(xiàn)簡(jiǎn)單復(fù)合圖形,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07C/C++實(shí)現(xiàn)磁盤(pán)相關(guān)操作的示例代碼
這篇文章主要為大家詳細(xì)介紹了C/C++如何實(shí)現(xiàn)磁盤(pán)相關(guān)操作,例如遍歷磁盤(pán)容量、實(shí)現(xiàn)磁盤(pán)格式化、移除指定磁盤(pán)等,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11C語(yǔ)言代碼實(shí)現(xiàn)簡(jiǎn)單2048游戲
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)2048游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-12-12jQuery移動(dòng)頁(yè)面開(kāi)發(fā)中主題按鈕的設(shè)計(jì)示例
這篇文章主要介紹了jQuery移動(dòng)頁(yè)面開(kāi)發(fā)中主題按鈕的設(shè)計(jì)示例,jQuery是當(dāng)今最具人氣的JavaScript開(kāi)發(fā)類庫(kù),需要的朋友可以參考下2015-12-12C語(yǔ)言中常見(jiàn)的六種動(dòng)態(tài)內(nèi)存錯(cuò)誤總結(jié)
學(xué)習(xí)過(guò)C語(yǔ)言中的動(dòng)態(tài)內(nèi)存函數(shù),例如【malloc】、【calloc】、【realloc】、【free】,那它們?cè)谑褂玫倪^(guò)程中會(huì)碰到哪些問(wèn)題呢,本本文我們一起來(lái)探討下,感興趣的朋友跟著小編一起來(lái)看看吧2023-11-11