sscanf函数用法
2010-10-04 23:43
232 查看
函数sscanf与scanf功能相同(更多的是将它划为字符串分割函数),对于scanf,是从标准流输入读取字符,对于sscanf则是从字符串中读取字符,函数原型为:
int sscanf (char *s, const char * format, ...);
返回值为返回参数数目,失败则返回-1
第一个参数可以是一个或多个 {%[*] [width] [{h | l | I64 | L}]type | ' ' | '\t' | '\n' | 非%符号}
1、 * 亦可用于格式中, (即 %*d 和 %*s) 加了星号 (*) 表示跳过此数据不读入(也就是不把此数据读入参数中) 。
2、width表示读取宽度,一般可忽略。
3、{h | l | I64 | L}:参数的size,通常h表示单字节size,I表示2字节 ,size,L表示4字节size(double例外),l64表示8字节size。
4、type :是指%s,%d等修饰符
5、特别的:%*[width] [{h | l | I64 | L}]type 表示满足该条件的被过滤掉,不会向目标参数中写入值
支持集合操作:
%[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)
%[aB'] 匹配a、B、'中一员,贪婪性
%[^a] 匹配非a的任意字符,贪婪性
具体应用:
1. 常见用法
char buf[512] = {0};
sscanf("123456 ", "%s", buf); //此处buf是数组名,它的意思是将123456以%s的形式存入buf中
printf("%s\n", buf);
结果为:123456
2. 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。
sscanf("123456 ", "%4s", buf); // %4s 表示取前4个字符
printf("%s\n", buf);
结果为:1234
3. 取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。
sscanf("123456 abcdedf", "%[^ ]", buf); // %[^ ] 表示匹配非空格的任意字符,函数读取到这里将结束
printf("%s\n", buf);
结果为:123456
4. 取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。
sscanf("123456abcdedfBCDEF", "%[1-9a-z]", buf); // %[1-9a-z] 表示匹配1-9和a-z中任意字符(区分大小写)
printf("%s\n", buf);
结果为:123456abcdedf
5. 取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。
sscanf("123456abcdedfBCDEF", "%[^A-Z]", buf); // %[^A-Z] 表示不匹配A-Z中的任意字符
printf("%s\n", buf);
结果为:123456abcdedf
6、给定一个字符串iios/12DDWDFF@122,获取 / 和 @ 之间的字符串,先将"iios/"过滤掉,再将非'@'的一串内容送到buf中
sscanf("iios/12DDWDFF@122", "%*[^/]/%[^@]", buf); // "%*[^/]/" 是过滤掉iios/ 这部分内容,先看[^/]再结合看*/(中间的[^/]拿出来了)
printf("%s\n", buf);
结果为:12DDWDFF
7、给定一个字符串““hello, world”,仅保留world。(注意:“,”之后有一空格)
sscanf(“hello, world”, "%*s%s", buf); // %*s表示第一个匹配到的%s被过滤掉,即hello被过滤了,如果没有空格则结果为NULL。
printf("%s\n", buf);
结果为:world
以上资料参考来自:http://baike.baidu.com/view/1364018.htm
int sscanf (char *s, const char * format, ...);
返回值为返回参数数目,失败则返回-1
第一个参数可以是一个或多个 {%[*] [width] [{h | l | I64 | L}]type | ' ' | '\t' | '\n' | 非%符号}
1、 * 亦可用于格式中, (即 %*d 和 %*s) 加了星号 (*) 表示跳过此数据不读入(也就是不把此数据读入参数中) 。
2、width表示读取宽度,一般可忽略。
3、{h | l | I64 | L}:参数的size,通常h表示单字节size,I表示2字节 ,size,L表示4字节size(double例外),l64表示8字节size。
4、type :是指%s,%d等修饰符
5、特别的:%*[width] [{h | l | I64 | L}]type 表示满足该条件的被过滤掉,不会向目标参数中写入值
支持集合操作:
%[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)
%[aB'] 匹配a、B、'中一员,贪婪性
%[^a] 匹配非a的任意字符,贪婪性
具体应用:
1. 常见用法
char buf[512] = {0};
sscanf("123456 ", "%s", buf); //此处buf是数组名,它的意思是将123456以%s的形式存入buf中
printf("%s\n", buf);
结果为:123456
2. 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。
sscanf("123456 ", "%4s", buf); // %4s 表示取前4个字符
printf("%s\n", buf);
结果为:1234
3. 取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。
sscanf("123456 abcdedf", "%[^ ]", buf); // %[^ ] 表示匹配非空格的任意字符,函数读取到这里将结束
printf("%s\n", buf);
结果为:123456
4. 取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。
sscanf("123456abcdedfBCDEF", "%[1-9a-z]", buf); // %[1-9a-z] 表示匹配1-9和a-z中任意字符(区分大小写)
printf("%s\n", buf);
结果为:123456abcdedf
5. 取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。
sscanf("123456abcdedfBCDEF", "%[^A-Z]", buf); // %[^A-Z] 表示不匹配A-Z中的任意字符
printf("%s\n", buf);
结果为:123456abcdedf
6、给定一个字符串iios/12DDWDFF@122,获取 / 和 @ 之间的字符串,先将"iios/"过滤掉,再将非'@'的一串内容送到buf中
sscanf("iios/12DDWDFF@122", "%*[^/]/%[^@]", buf); // "%*[^/]/" 是过滤掉iios/ 这部分内容,先看[^/]再结合看*/(中间的[^/]拿出来了)
printf("%s\n", buf);
结果为:12DDWDFF
7、给定一个字符串““hello, world”,仅保留world。(注意:“,”之后有一空格)
sscanf(“hello, world”, "%*s%s", buf); // %*s表示第一个匹配到的%s被过滤掉,即hello被过滤了,如果没有空格则结果为NULL。
printf("%s\n", buf);
结果为:world
以上资料参考来自:http://baike.baidu.com/view/1364018.htm