VS2013+ 默認將 `scanf` 標記為不安全(C4996),強制遷移 `scanf_s`。
三種解法
- 改用 scanf_s(推薦):
`scanf_s("%d %d", &x, &y);`
- 專案屬性禁用警告:
C/C++ → Preprocessor → Preprocessor Definitions 添加 `_CRT_SECURE_NO_WARNINGS`。
- 代碼開頭定義:
`#define _CRT_SECURE_NO_WARNINGS`(需在所有 `#include` 之前)。
scanf vs scanf_s 差異
| 項目 | scanf | scanf_s |
| 字符串讀取 | `%s` 無長度限制,易溢出 | `%s` 需緊跟緩衝區大小:`scanf_s("%s", buf, (unsigned)_countof(buf))` |
| 字符讀取 | `%c` | `%c` 同樣需大小:`scanf_s("%c", &ch, 1)` |
| 整數/浮點 | 同樣 | 同樣 |