sscanf函数的高级用法函数的高级用法
sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。
函数原型:
intsscanf(constchar*format[,argument]...);
其中的format可以是一个或多个:{%[*][width][{h|l|I64|L}]type|''|' '|''|非%符号},
注:
1)、*亦可用于格式中,(即%*d和%*s)加了星号(*)表示跳过此数据不读入。
(也就是不把此数据读入参数中)
2)、{a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。
3)、width:宽度,一般可以忽略,用法如:
constcharsourceStr[]="hello,world";
charbuf[10]={0};
sscanf(sourceStr,"%5s",buf);//%5s,只取5个字符
cout<<buf<<endl;
结果为:hello
4)、{h|I|I64|L}:参数的size,通常h表示单字节size,I表示2字节size,
L表示4字节size(double例外),l64表示8字节size。
5)、type:这就很多了,就是%s,%d之类。
6)、特别的:%*[width][{h|l|I64|L}]type表示满足该条件的被过滤掉,
不会向目标参数中写入值。如:
constcharsourceStr[]="hello,world";
charbuf[10]={0};
sscanf(sourceStr,"%*s%s",buf);
//%*s表示第一个匹配到的%s被过滤掉,即hello被过滤了
cout<<buf<<endl;
结果为:world
7)、支持集合操作:
%[a-z]表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)
%[aB']匹配a、B、'中一员,贪婪性
%[^a]匹配非a的任意字符,贪婪性
和正则表达式很相似,而且仍然支持过滤,即可以有%*[a-z]。
例子:
1、常见用法。
charbuf[512]={0};
sscanf("123456","%s",buf);
printf("%s",buf);
结果为:123456
评论10
最新资源