sscanf的用法

部分来源: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”, 中间带空格的字符串的提取
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值