- C和C++安全編碼(原書第2版)
- (美)Robert C.Seacord
- 324字
- 2020-10-30 17:56:45
2.5.8 memcpy()和memmove()
C標準的memcpy()和memmove()函數很容易出錯,因為它們不允許調用者指定目標數組的大小。
C11附錄K邊界檢查接口。在C11附錄K中定義的memcpy_s()和memmove_s()函數,與相應的安全性較低的memcpy()和memmove()函數類似,但提供了一些額外的保障。為了防止緩沖區溢出,memcpy_s()和memmove_s()函數具有額外的參數來指定目標數組的大小。如果發生運行時約束違反,則目標數組被零填充,以增加問題的能見度。此外,為了減少出現未定義行為情況的數量,如果正在嘗試復制重疊的對象,memcpy_s()函數必須報告約束違反。
memcpy_s()和memmove_s()函數如果執行成功則返回0。如果源或目標指針為NULL,或者指定要復制/移動的字符數大于目標緩沖區的最大大小,或者如果要復制/移動的字符數或目標緩沖區的最大大小大于RSIZE_MAX,則返回一個非零值。
推薦閱讀
- JavaScript修煉之道
- Python Game Programming By Example
- Designing Hyper-V Solutions
- 物聯網系統開發:從0到1構建IoT平臺(第2版)
- MySQL數據庫管理與開發實踐教程 (清華電腦學堂)
- INSTANT Adobe Edge Inspect Starter
- HTML5權威指南
- C#程序設計基礎入門教程
- 從零開始學UI設計·基礎篇
- jMonkeyEngine 3.0 Beginner’s Guide
- C語言從入門到精通(微視頻精編版)
- Serverless從入門到進階:架構、原理與實踐
- Neo4j Graph Data Modeling
- Salt Cookbook
- 代碼揭秘