函数原型:int sscanf(const char *str, const char *format, [argument]...);
函数功能:sscanf会从str里读进数据,依照format的格式将数据写入到argument里。
参数:str存储的数据
format格式控制字符串
argument 选择性设定字符串
返回值:成功则返回参数数目,失败则返回-1,错误原因存于errno中。
format支持的常见格式如下:
%[a-z] 表示匹配a到z中任意字符
%[aB'] 匹配a、B、'中一员,贪婪性
%[^a] 匹配非a的任意字符,并且停止读入,贪婪性
示例代码如下:
#include <stdio.h>
#define N 128
int main()
{
char buf[N] = {0};
sscanf("123456", "%s", buf);
printf("%s\n", buf); //结果为:123456
//取指定长度的字符串
sscanf("123456", "%4s", buf);
printf("%s\n", buf); //结果为:1234
// 取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串
sscanf("12345 6abcdef", "%[^ ]", buf);
printf("%s\n", buf); //结果为:12345
//取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串
sscanf("1B2A3456abcdefBCDEF", "%[1-9a-z]", buf);
printf("%s\n", buf); //结果为:1
//取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串
sscanf("12A3456abcdefBCDEF", "%[^A-Z]", buf);
printf("%s\n", buf); //结果为:12
//给定一个字符串iios/12DDWDFF@122,获取 / 和 @ 之间的字符串,先将 "iios/"过滤掉,再将非'@'的一串内容送到buf中
sscanf("iios/12DFSD@122", "%*[^/]/12D%[^@]", buf);
printf("%s\n", buf); //结果为:FSD
//给定一个字符串“h e,l, world”,去掉第一个字符串。(注意:“,”之后有一空格,%s遇空格停止,加*则是忽略第一个读到的字符串)
sscanf("h e,l lloworld", "%*s%s", buf);
printf("%s\n", buf); //结果为:e,1
return 0;
}
程序执行结果如下:
linux@ubuntu:~/thread/alarm$ cc sscanf.c
linux@ubuntu:~/thread/alarm$ ./a.out
123456
1234
12345
1
12
FSD
e,l