最近一直在写加载配置文件的代码,大多用sscanf函数来分割字符串,学习和总结一下它的用法:
基本用法
通过ssacnf()语句可以找到和它前面匹配的语句然后打印出后面需要的东西,基本格式为%[set],表示将接收一个由set指定格式的字符串,其中set表示可接受的字符集合。
set一般有两种情况:
(1)%[^set]表示非,即在输入字符串中匹配不在set字符集合的所有字符,遇见set字符集中的字符即停止;
(2)%[set],匹配输入字符串中所有在set字符集中的字符,遇见非set字符集的字符时即停止。
如:
sscanf(buf,"%[^&]",str); //当输入的字符中出现"&"时停止匹配,如果输入hello&world,则str=hello;
sscanf(buf,"%[^290#]",str); //当输入aidc#ad时,则str=aidc,即当输入出现了"#"时不再将输入内容放入str;
sscanf(buf,"%[dlza#i]",str) // 如果不是这几个字符则停止匹配,如当输入ai#dcad时,str=ai#d,因为c不在[dlza#i]中.
特殊情况:
(1)如果要匹配"^"时,当然不能直接放在[]中,所以可以用%[ab^cd]这种方式,
(2)当要匹配右方括号"]"时,应把其放在set中第一个位置,如"%[]abc]"表示匹配的字符集为{], a, b, c},又如"%[^]abc]"表示匹配所有非"], a, b, c"中的字符
(3)另外,还可以使用"-" 如%[a-z]表示只匹配abcd....yz等小写的字母;%[0-9]表示只匹配0,1,2...9等数字;
(4) * 表示跳过.
注意 : “-”的字符只有在其左右两边都有有效字符时才有这个作用,否则被认为是普通字符,如“a-c-e-g”匹配的字符为{a, b, c, -, e, f, g},这样也为输入“-”字符提供了方法。
sscanf函数的高级用法
sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。
函数原型:
int scanf( const char *format [,argument]... );
其中的format可以是一个或多个:{%[*][width][{h|l|I64|L}]type|'