---
tags: 程式語法, C
---
# [C] sscanf用法
## 定義
```c
int sscanf (const char *str, const char *format, ...);
```
### 參數
**str**
來源字串。
**format**
格式字串,如:`%d`、`%s`。
**`...`**
用來接`%d`、`%s`等的變數。
### Return
成功取得的結果數量。
### Include
stdio.h
## 分析字串用法
format語法:`%[*][width][modifiers]type`
| 參數 | 說明 |
| ----- | -------------- |
| % | 開始符號 |
| * | 忽略不存入變數 |
| width | 最大讀取長度 |
### 範例
```c
sscanf("123456", "%4s", buf1); //只取4個字元
sscanf("name:carlo", "%[^:]", buf2); //取到":"為止
sscanf("name:carlo", "%*[^:]:%s", buf3); //忽略":"之前的部分,並取":"之後的部分
sscanf("123abcDEF", "%[1-9a-z]", buf4); //只取數字和小寫字母
sscanf("2018-11-29 13:39:08.838", "%*[^ ] %d:%d:%d.%d", &hour, &min, &sec, &ms);
sscanf("2018-11-29 INFO @5830714026", "%s %*[^ ] %[^@]@%lld", date, tmp, &llNum);
//===== result =====//
buf1 = "1234"
buf2 = "name"
buf3 = "carlo"
buf4 = "123abc"
hour = 13, min = 39, sec = 8, ms = 838
date = "2018-11-29", tmp = "", llNum = 5830714026
```
## 拆字串用法
```c
char str[] = "pinA,pinB,pinC";
char *pinStr = str;
char pin[8] = {'\0'};
int len = 0;
for(pinStr; sscanf(pinStr, "%[^,],%n", pin, &len) == 1; pinStr += len)
printf("%s\n", pin); // %n為讀取了幾個字元
//===== result =====//
pinA
pinB
pinC
```