资料引自: 传送门
sscanf函数原型:
Int sscanf( const char * src, const char * format, ...);
int scanf( const char * format, ...);
这两个函数很相似,只是第一个函数以src(固定字符串)作为输入,而第二个函数以标准输入stdin读取输入; 其中的format是格式控制字符串,它包含控制字符(如:%d,%i,%s等),空白字符(如:空格、制表符\t、回车换行符\n 或其连续组合)以及非空白字符; "..."是一组指针变量,是上述函数用来保存结果值的;返回值为被成功赋值的指针变量的个数,如果该函数发生错误,则返回EOF(-1)。
格式控制format:
format可以是一个或多个 {%[*] [width] [{h | l | I64 | L}]type | 空白字符| 非空白符号}
该公式中符号解释如下:
{a|b|c}:表示a,b,c中选一或几个;
[d]:表示可以有d也可以没有d;
"" :亦可用于格式中, (即 %*d 和 %*s) 加了星号 () 表示跳过此数据不读入. (也就是不把此数据读入参数中) ,用法如:
const char sourceStr[] = "hello, world";
char buf[10] = ;
sscanf(sourceStr, "%*s%s", buf); //%*s表示第一个匹配到的%s被过滤掉,即hello被过滤了
cout << buf<< endl;
结果为:world
- width:宽度:一般可以忽略,用法如:
const char sourceStr[] = "hello, world";
char buf[10] = ;
sscanf(sourceStr, "%5s", buf); //%5s,只取5个字符
cout << buf<< endl;
- {h | l | I64 | L}:参数的size,通常h表示单字节size,I表示2字节 size,L表示4字节size(double例外),l64表示8字节size;
- type:即为控制字符如:d, i, f, s, p, 及集合[ ],(注意%号写在了最前面了,这里不能再加一个%号了。) 需特别注意和说明的控制符是集合%[ ]:
%[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)
%[aB'] 匹配a、B、'中一员,贪婪性
%[^a] 匹配非a的任意字符,贪婪性
例如取遇到空格为止字符串:
sscanf("123456 abcdedf", "