C語言中scanf與scnaf_s函數(shù)詳解
scanf_s
scanf_s()函數(shù)是Microsoft公司VS開發(fā)工具提供的一個功能相同的安全標準輸入函數(shù),從vc++2005開始,VS系統(tǒng)提供了scanf_s()。在調用該函數(shù)時,可以提供一個數(shù)字以表明最多讀取多少位字符。
MSDN上scanf_s的簡單模型:int scanf_s( const char *format [, argument]...);一般我們常用的格式:scanf_s(輸入格式,輸入流 [,輸入變量的大?。▎挝唬鹤止?jié))])返回值:int類型(正常讀取返回1;讀取異常返回0)
使用scanf_s
一個字符輸入
int main()
{
char n = 0;
scanf_s("%c", &n, sizeof(n));
printf("%c\n", n);
return 0;
}

一個整型輸入
int main()
{
int n = 0;
scanf_s("%d", &n, sizeof(n));
printf("%d\n", n);
return 0;
}

多個整形輸入
int main()
{
int n = 0;
int m = 0;
scanf_s("%d%d", &n, &m, sizeof(n), sizeof(m));
printf("n = %d,m = %d\n", n, m);
return 0;
}

注意:在scanf_s中多個輸入的格式問題

一個字符數(shù)組輸入
這里用%s輸入一個字符數(shù)組時,最后的‘\0’是需要占1個字節(jié)的空間的;而當輸入的長度超過了數(shù)組的長度時,scanf_s的安全檢測就體現(xiàn)了,它直接返回0;printf也不會打印出來,只有一個空行,沒有報錯
int main()
{
char arr[5] = { 0 };
scanf_s("%s", arr, sizeof(arr));
printf("%s\n", arr);
return 0;
}


scanf
這是C語言標準庫里面的一個函數(shù),在VS底下使用這個會有警告,我們在文件開頭加上:(#define _CRT_SECURE_NO_WARNINGS 1)或者 (#pragma warning(disable:4996)
就不會有警告了;
MSDN上scanf的簡單模型:int scanf( const char *format [,argument]... );一般我們常用的格式:scanf(輸入格式,輸入流 )返回值:int類型(正常讀取返回讀取成功的元素個數(shù);讀取異常返回EOF)
使用scanf
一個整數(shù)輸入

多個整數(shù)輸入

字符數(shù)組輸入
可以看到scanf在輸入字符串的時候,并沒有安全檢測,而是會直接用了數(shù)組后面的??臻g,然后造成棧溢出的問題


總結
使用scanf_s函數(shù)雖然安全性比較高,但是可移植性差。scanf_s只能用在VS編譯器上,而其他的用不了它scanf函數(shù)雖然沒有scanf_s函數(shù)那么安全,但可移植性是比scanf_s強
到此這篇關于C語言中scanf與scnaf_s函數(shù)詳解的文章就介紹到這了,更多相關C語言scanf與scnaf_s內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C++中delete和delete[]的區(qū)別詳細介紹
一直對C++中的delete和delete[]的區(qū)別不甚了解,今天遇到了,上網查了一下,得出了結論,拿出來和大家分享一下2012-11-11

