部分来源:https://blog.youkuaiyun.com/zhouwei1221q/article/details/44890617
感谢博主分享。若有侵权,请联系删除
```c
#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{
int a=0, b=0, c=0;
char buf[64] = {'\0'};
sscanf("2015.04.05", "%d.%d.%d", &a,&b,&c); //取需要的字符串, 以%d来转换为整形
printf("a=%d, b=%d, c=%d\n", a, b, c); // a=2015,b=4,c=5
sscanf("wanyuanzhao mark", "%3s", buf); //取指定长度的字符串
printf("buf=%s\n", buf); //wan
memset(buf, 0, sizeof(buf));
sscanf("wanyuanzhao mark", "%[^ ]", buf); //取到指定字符为止的字符串, 这里是取遇到空格为止的字符串
printf("buf=%s\n", buf); //wanyuanzhao
memset(buf, 0, sizeof(buf));
sscanf("654321abcdedfABCDEF", "%[1-9a-z]", buf); //取仅包含指定字符集的字符串
printf("buf=%s\n", buf); //654321abcded
memset(buf, 0, sizeof(buf));
sscanf("BCDEF123456abcdedf", "%[^a-z]", buf); //取到指定字符集为止的字符串
printf("buf=%s\n", buf); //BCDEF123456
//其中%[]类似于一个正则表达式,如[a-z]表示读取所有a-z的字符,[^a-z]表示读取所有非小写字母的字符。
//那么在这里%*[^&]表示先过滤掉abcd,然后以&隔开,后面还剩hello$why,然后将$之前非$的字符提取到str中
memset(buf, 0, sizeof(buf));
sscanf("abcd&hello$why", "%*[^&]&%[^$]", buf);
printf("buf=%s\n", buf); //hello
//其中%*s表示第一个被匹配到的字符串"what,"是被过滤掉了,如果没有空格,则结果为NULL。
//其实“what, time”被空格分割成了两个字符串"what,"和"time"
memset(buf, 0, sizeof(buf));
sscanf("what, time", "%*s%s", buf);
printf("buf=%s\n", buf);
//e4:d3:32:f4:21:47 5745 -44 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] WYZ 5G
char * src = "e4:d3:32:f4:21:47 5745 -44 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] WYZ--5G";
char buf_mac[32] = {'\0'};
int freq = 0;
int signal_db = 0;
char buf_erp[64] = {'\0'};
char name[32] = {'\0'};
int ret = sscanf(src, "%s %d %d %s %s", buf_mac, &freq, &signal_db, buf_erp, name);
printf("ret=%d\n", ret);
printf("%s %d %d %s %s\n", buf_mac, freq, signal_db, buf_erp, name);
//c0:84:7d:77:e0:ea 5745 -73 [WPA2-PSK-CCMP][ESS] WYZ 123456
//暂时没能解决这种“WYZ 123456”, 中间带空格的字符串的提取
}