首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Visual Studio 中 strcpy 報錯「不安全」?一文搞懂 strcpy_s 替換指南

     編輯:程式設計綜合問答

VS2013+ 編譯 C/C++ 代碼時,strcpy 會報 C4996 警告,建議用 strcpy_s。兩者核心區別:

函數簽名對比

char *strcpy(char *dest, const char *src);           // 無長度檢查
errno_t strcpy_s(char *dest, rsize_t destsz, const char *src); // 需目標緩衝區大小

為何 strcpy 不安全?

  • 不檢查目標緩衝區大小,源字符串過長導致緩衝區溢出,引發安全漏洞。
  • 攻擊者可利用溢出覆蓋返回地址,執行任意代碼。

正確使用 strcpy_s

char dest[20];
strcpy_s(dest, sizeof(dest), "Hello"); // 安全
// strcpy_s(dest, 20, "Hello"); // 也可顯式傳大小

常見錯誤與對策

錯誤現象原因修正
運行彈窗報錯目標緩衝區太小或未初始化確保 destsz ≥ 源串長度+1
編譯錯誤:缺少頭文件未包含 <string.h>添加 #include <string.h>
跨平台編譯失敗strcpy_s 為 Microsoft 擴展用 #ifdef _MSC_VER 區分或改用 strncpy

建議

新代碼統一用 strcpy_s;舊代碼可定義 _CRT_SECURE_NO_WARNINGS 抑制警告,但需自行保證安全。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved