- 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,則返回一個非零值。
推薦閱讀
- Android Wearable Programming
- UML和模式應用(原書第3版)
- 軟件測試工程師面試秘籍
- Java加密與解密的藝術(第2版)
- Magento 2 Development Cookbook
- The React Workshop
- Python Tools for Visual Studio
- Python高效開發實戰:Django、Tornado、Flask、Twisted(第3版)
- Redis Essentials
- 單片機C語言程序設計實訓100例
- RealSenseTM互動開發實戰
- Android應用開發深入學習實錄
- PhoneGap 4 Mobile Application Development Cookbook
- Spring Boot從入門到實戰
- Unreal Engine Game Development Cookbook