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); // 需目標緩衝區大小
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 抑制警告,但需自行保證安全。