網站首頁 編程語言 正文
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
相關推薦
- 2022-05-08 React的事件處理你了解嗎_React
- 2022-03-24 c++中的bind使用方法_C 語言
- 2022-09-03 C++中std::conditional的使用說明_C 語言
- 2022-12-23 loadavg數據異常引發(fā)問題起源分析_Android
- 2023-03-19 C語言實現求解素數的N種方法總結_C 語言
- 2023-01-18 解讀Opencv中Filter2D函數的補全方式_python
- 2023-11-23 pyside6打開文件夾路徑或選擇文件的方式分享
- 2022-10-18 ASP.NET?MVC增加一條記錄同時添加N條集合屬性所對應的個體_實用技巧
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支