您好,登錄后才能下訂單哦!
小編給大家分享一下C語言中scanf與scanf_s函數(shù)怎么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
a.代碼1
int main() { char a = 0; //scanf_s("%c", &a, 1); scanf_s("%c", &a, sizeof(a)); return 0; }
scanf_s有三個(gè)參數(shù),最后一個(gè)是變量a所占據(jù)空間的大?。▎挝粸樽止?jié)),這里可以寫1,也可以寫sizeof(a)。如果a為整型的話,第三個(gè)參數(shù)就為4,或者sizeof(a)。
b.代碼2
int main() { char a = 0, b = 0; scanf_s("%c %c", &a, 1, &b, 1); printf("%c %c", a, b); return 0; }
可不要寫成 scanf_s("%c%c",&a,&b,1,1); 這樣會(huì)出錯(cuò)的
c.代碼3
int main() { char arr1[5] = { 0 }; scanf_s("%s", arr1, sizeof(arr1)); printf("%s", arr1); return 0; }
注意:輸入字符的個(gè)數(shù)時(shí),一定是比數(shù)組的空間個(gè)數(shù)小的,比如像上面的代碼只能輸入1-4個(gè)字符,而不是5個(gè),不然會(huì)出錯(cuò)的。(arr[4]裝的應(yīng)該是一個(gè)換行符)
d.安全性檢測
int main() { char arr1[5] = { 0 }; int c=scanf_s("%s", arr1, sizeof(arr1)); printf("%d\n", c); printf("%s", arr1); return 0; }
如果輸入的字符個(gè)數(shù)>=數(shù)組空間 個(gè)數(shù),scanf_s的返回值就為0,反之則為1。
int main() { char arr1[5] = { 0 }; scanf_s("%s", arr1, sizeof(arr1)); printf("%s", arr1); return 0; }
如果輸入的字符個(gè)數(shù)>=數(shù)組空間 個(gè)數(shù),是不會(huì)打印數(shù)組中的元素的。(而scanf函數(shù)就會(huì)打印出)
a.代碼1
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int a = 0; scanf("%d", &a); printf("%d", a); return 0; }
在VS13 17 19的版本下使用scanf函數(shù)一定在最開始(#define _CRT_SECURE_NO_WARNINGS),不然會(huì)報(bào)錯(cuò)的。
b.安全性測試
int main() { char arr1[5] = { 0 }; int c=scanf("%s", arr1); printf("%d\n", c); printf("%s", arr1); return 0; }
當(dāng)我們輸入abcdefg 7個(gè)字符時(shí)(已經(jīng)超出了數(shù)組的空間個(gè)數(shù)了),雖然可以打印出來,但是arr1附近的??臻g已被破壞了,出現(xiàn)越界的情況了。scanf_s不會(huì)打印出來,也就不存在越界的行為了。
c.當(dāng)在scanf函數(shù)里面輸入格式符
如%d %d(%d%d之間有空格),那么通過標(biāo)準(zhǔn)輸入設(shè)備(鍵盤)輸入時(shí)兩個(gè)整型之間也加一個(gè)空格。
如%d,%d(%d%d之間逗號(hào)),那么通過標(biāo)準(zhǔn)輸入設(shè)備(鍵盤)輸入時(shí)兩個(gè)整型之間也加一個(gè)逗號(hào)。
使用scanf_s函數(shù)雖然安全性比較高,但是可移植性差。比如含有scanf_s函數(shù)的代碼不一定在其它的編譯器上能夠跑過。
scanf函數(shù)雖然沒有scanf_s函數(shù)那么安全,但可移植性是比scanf_s強(qiáng)。
scanf_s函數(shù)與scanf函數(shù)的使用與比較今天就分享到這里了,如果對(duì)你有幫助的話嗎,可以給個(gè)關(guān)注,順便給個(gè)贊。
以上是“C語言中scanf與scanf_s函數(shù)怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。