溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C語言中scanf與scanf_s函數(shù)怎么用

發(fā)布時(shí)間:2021-10-18 12:42:16 來源:億速云 閱讀:136 作者:小新 欄目:開發(fā)技術(shù)

小編給大家分享一下C語言中scanf與scanf_s函數(shù)怎么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

1.scanf_s(是vs提供的函數(shù))

a.代碼1

int main()
{
	char a = 0;
	//scanf_s("%c", &a, 1);
	scanf_s("%c", &a, sizeof(a));
	return 0;
}

C語言中scanf與scanf_s函數(shù)怎么用

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;
}

C語言中scanf與scanf_s函數(shù)怎么用

可不要寫成  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;
}

C語言中scanf與scanf_s函數(shù)怎么用

注意:輸入字符的個(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;
}

C語言中scanf與scanf_s函數(shù)怎么用

如果輸入的字符個(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;
}

C語言中scanf與scanf_s函數(shù)怎么用

 如果輸入的字符個(gè)數(shù)>=數(shù)組空間 個(gè)數(shù),是不會(huì)打印數(shù)組中的元素的。(而scanf函數(shù)就會(huì)打印出)

2.scanf(標(biāo)準(zhǔn)的庫函數(shù))

a.代碼1

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	int a = 0;
	scanf("%d", &a);
	printf("%d", a);
	return 0;
}

C語言中scanf與scanf_s函數(shù)怎么用

在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;
}

C語言中scanf與scanf_s函數(shù)怎么用

 當(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)。

3.總結(jié)

使用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è)資訊頻道!

向AI問一下細(xì)節(jié)

免責(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)容。

AI