char str[512] = {0};
sscanf("123456", "%s", str); // 讀取至空白字元
printf("str=%s\n", str); // 輸出: 123456
| 需求 | 格式字串 | 範例輸入 | 結果 |
|---|---|---|---|
| 固定長度 | %4s | 123456 | 1234 |
| 遇指定字元停止 | %[^ ] | 123456 abcd | 123456 |
| 僅接受字元集合 | %[1-9a-z] | 123456abcDEF | 123456abc |
| 遇字元集合停止 | %[^A-Z] | 123456abcDEF | 123456abc |
%[set]:掃描集合,僅讀取集合內字元,遇非集合字元停止。%[^set]:反向掃描集合,讀取直到遇到集合內字元。a-z、0-9、單一字元;^ 必須緊跟 [ 表示反向。%4s、%4[...] 可防止緩衝區溢位。// 解析 "key=value",值可含空白
char key[64], val[256];
sscanf(line, "%63[^=]=%255[^\n]", key, val);
// 解析 IPv4
int a,b,c,d;
sscanf(ip, "%d.%d.%d.%d", &a,&b,&c,&d);
// 解析日期 "2024-05-18"
int y,m,d;
sscanf(date, "%4d-%2d-%2d", &y,&m,&d);
sscanf 回傳成功賦值個數,必須驗證。寬度+1。] 或 -:] 放首位 []...],- 放首尾或轉義。%[^\n] 在 Windows 可能殘留 \r,建議後續處理。C11 sscanf_s、C++ std::istringstream、std::from_chars(C++17)提供更強型別安全與邊界檢查。