scanf("%d", &a); // 正確:兩個參數
scanf("%d"); // 錯誤:缺少 &a,編譯器報「參數太少」
檢查格式字符串中 % 佔位符數量,與後續參數一一對應。
VS 2013 默認啟用 安全 CRT,建議使用帶 _s 後綴的安全版本:
| 標準函數 | 安全版本 | 額外參數 |
|---|---|---|
| scanf | scanf_s | 緩衝區大小 (針對 %s/%c/%[ ) |
| strcpy | strcpy_s | 目標緩衝區大小 |
| strcat | strcat_s | 目標緩衝區大小 |
| sprintf | sprintf_s | 目標緩衝區大小 |
| fopen | fopen_s | 返回錯誤碼,指針作輸出參數 |
char buf[100];
scanf_s("%s", buf, (unsigned)sizeof(buf)); // 必須傳大小
scanf_s("%c", &ch, 1); // %c 也需大小
#define _CRT_SECURE_NO_WARNINGS // 放在所有 #include 之前
#include <stdio.h>
// 現在可用 scanf, strcpy 等不帶 _s 版本
_s 版本,養成緩衝區大小意識。/W4 或 -Wall -Wextra)。