日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C語言中scanf與scnaf_s函數詳解_C 語言

作者:?°九三?? ? 更新時間: 2022-03-27 編程語言

scanf_s

scanf_s()函數是Microsoft公司VS開發(fā)工具提供的一個功能相同的安全標準輸入函數,從vc++2005開始,VS系統提供了scanf_s()。在調用該函數時,可以提供一個數字以表明最多讀取多少位字符。

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中多個輸入的格式問題

在這里插入圖片描述

一個字符數組輸入

這里用%s輸入一個字符數組時,最后的‘\0’是需要占1個字節(jié)的空間的;而當輸入的長度超過了數組的長度時,scanf_s的安全檢測就體現了,它直接返回0;printf也不會打印出來,只有一個空行,沒有報錯

int main()
{
	char arr[5] = { 0 };

	scanf_s("%s", arr, sizeof(arr));

	printf("%s\n", arr);

	return 0;
}

在這里插入圖片描述

在這里插入圖片描述

scanf

這是C語言標準庫里面的一個函數,在VS底下使用這個會有警告,我們在文件開頭加上:(#define _CRT_SECURE_NO_WARNINGS 1)或者 (#pragma warning(disable:4996)
就不會有警告了;

MSDN上scanf的簡單模型:int scanf( const char *format [,argument]... );一般我們常用的格式:scanf(輸入格式,輸入流 )返回值:int類型(正常讀取返回讀取成功的元素個數;讀取異常返回EOF)

使用scanf

一個整數輸入

在這里插入圖片描述

多個整數輸入

在這里插入圖片描述

字符數組輸入

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

在這里插入圖片描述

在這里插入圖片描述

總結

使用scanf_s函數雖然安全性比較高,但是可移植性差。scanf_s只能用在VS編譯器上,而其他的用不了它scanf函數雖然沒有scanf_s函數那么安全,但可移植性是比scanf_s強

原文鏈接:https://blog.csdn.net/qq_47799626/article/details/122419053

欄目分類
最近更新