--- 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 ```