标签:
#include <stdio.h> int main() { int i; unsigned int j; char input[ ]="10 0x1b aaaaaaaa bbbbbbbb"; char s[5]; sscanf(input,"%d %x %5[a-z] %*s %f",&i,&j,s,s); printf("%d %d %s\n",i,j,s); return 0; }
%5[a-z]意思是最多匹配5个a-z的字符串。在格式化符中[...]的意义,匹配与[]中最长输入的非空字符
举两个例子:
如果你把改成这样
char input[ ]="10 0x1b aaa0aaaaa bbbbbbbb";
那么这是s只能是aaa,到0被截断,因为0不属于a-z。
如果你把改成这样
char input[ ]="10 0x1b nothing bbbbbbbb";
[a-z]改为[a-p]
那么这是s只能是no,到t被截断,因为t不属于a-p。
另外:最后一个%f在这里没什么用。
%*s是什么意思,这个就是一个简单的跳过一个字符串,只用在输入格式控制。
还是举个例子:
char input[ ]="10 0x1b aaaa bbbb cccc";
sscanf(input,"%d %x %5[a-z] %*s %s",&i,&j,s,s);
这样最后输出s中存的是cccc。
第一个%5[a-z],把aaaa读入了;然后紧接着是%*s意思是跳过一个字符串,也就是bbbb被跳过;第三个%s把cccc读入。
这个符号的目的就是可以让你有选择的读入,不需要的直接跳过
标签:
原文地址:http://www.cnblogs.com/yll-sww/p/4571514.html