-
返回值
-
成功则返回参数数目,失败则返回-1,错误原因存于errno中。
-
经多次测试[来源请求],在linux系统中成功返回的是成功转换的值的个数,例如:sscanf("1 2 3","%d %d %d",buf1, buf2, buf3); 成功调用返回值为3,即buf1,buf2,buf3均成功转换。sscanf("1 2","%d %d %d",buf1, buf2, buf3); 成功调用返回值为2,即只有buf1,buf2成功转换。(注意:此处buf均为地址)
-
-
支持集合操作
-
%[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)
-
%[aB'] 匹配a、B、'中一员,贪婪性
-
%[^a] 匹配非a的任意字符,并且停止读入,贪婪性
-
-
常见用法。
-
char buf[512];
-
sscanf("123456","%s",buf);//此处buf是数组名,它的意思是将123456以%s的形式存入buf中!
-
printf("%s\n",buf); // 结果为:123456
-
-
取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。
-
sscanf("123456","%4s",buf);
-
printf("%s\n",buf); // 结果为:1234
-
-
取到指定字符为止的字符串。如在下例中,取遇到任意小写字母为止的字符串。
-
sscanf("123456abcdedf","%[^a-z]",buf);
-
printf("%s\n",buf); // 结果为:123456
-
-
取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。
-
示例一
-
sscanf("123456abcdedfBCDEF","%[1-9a-z]",buf);
-
printf("%s\n",buf); // 结果为:123456abcdedf
-
-
示例二
-
sscanf("123456abcdedfBCDEF","%[1-9A-Z]",buf);
-
printf("%s\n",buf); // 结果为:123456BCDEF(错!!)。结果应该为:123456【因为遇到不是1-9或者A-Z的字符时,即遇到小写字母时,就已经结束
-
-
-
取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。
-
sscanf("123456abcdedfBCDEF","%[^A-Z]",buf);
-
printf("%s\n",buf); // 结果为:123456abcdedf
-
-
给定一个邮箱,取出公司名:MrSpring@google.com,先将 "MrSpring@"过滤掉,再将非'.'的一串内容送到buf中。
-
sscanf("MrSpring@google.com","%*[^@]@%[^.]", buf);
-
printf("%s\n",buf); // 结果为:google。
-
-
给定一个字符串“hello, world”,仅保留world。(注意:“,”之后有一空格,%s遇空格停止,加*则是忽略第一个读到的字符串)
-
sscanf(“hello, world”,"%*s%s",buf);
-
printf("%s\n",buf); // 结果为:world。%*s表示第一个匹配到的%s被过滤掉,即“hello,”被过滤了,如果没有空格则结果为NULL。
-
-
ssanf默认以空白符(空格,tab等)作为分隔符。
-
示例一: 空白符作为分隔符
-
sscanf("1 2 3", "%d%d%d", &a, &b, &c) // a=1, b=2, c=4
-
-
示例二: 非空白符(如逗号)作为分隔符
-
sscanf("1,2,3", "%d,%d,%d", &a, &b, &c) // a=1, b=2, c=4
-
-
-
sscanf从源字符串中读取浮点数时,double类型的格式化字符为%lf, float类型的格式化字符为%f。
-
示例一:float类型
-
float ff;
-
sscanf("123.456", "%f", &ff); // ff = 123.456000
-
-
示例二:double类型
-
double dd;
-
sscanf("123.456", "%lf", &dd); // dd = 123.456000
-
-