C语言sscanf函数部分参数使用示例-详解

函数语法:
int sscanf(     const char *buffer,     const char *format, [ argument ] ...   );

说明:

sscanf和scanf的相同之处为:都是用于输入的。第二个参数可以是一个或多个 {%[*] [width] [{h | I | I64 | L}]type | ‘ ‘ | ‘\t’ | ‘\n’ | 非%符号}

区别为:scanf主要用于读取键盘(stdin)输入,sscanf主要用于读取固定字符串。

备注:

  1. 星号* 也可以写到格式当中, (即 %*d 和 %*s) 加了星号 (*) 表示跳过此数据不读入到参数中。
  2. 大括号表示多选一,选项用|分隔,如:{a|b|c}意思是从a,b,c中选一个;中括号表示可选,如:[d],表示可以有d也可以没有d。
  3. width表示读取宽度。
  4. {h | l | I64 | L}:参数的size,通常h表示单字节size,I表示2字节 size,L表示4字节size(double例外),l64表示8字节size。
  5. type :这就很多了,就是%s,%d之类。
  6. 特别的:%*[width] [{h | l | I64 | L}]type 表示满足该条件的被过滤掉,不会向目标参数中写入值失败返回0 ,否则返回格式化的参数个数
  7. 如果读取的字符串,不是以空格来分隔的话,就可以使用%[]。

以下示例详解:

char buff[64] = {0};
sscanf("iios/12DDWDFF@122", "%*[^/]/%[^@]", buff);
printf("%s\n", buff);
运行结果:
12DDWDFF

解释:
%*[^/]/%[^@]: 
%*: 先忽略读取到的所有字符,意思就是扫描字符,但不放入buff。
[^/]: 遇到/时结束忽略,意思就是从/开始,包括/都要入入buff。
/    :  /又不要了,好吧,不要就不放buff,那接下来想干嘛,继续看后面的格式化。
%[^@]  : 扫描任意多的字符直到@为止,@不放入buff。 

sscanf("+GETID:0000000090013963\r\n", "%*[^:]:%s", buff);
printf("%s", buff);
运行结果:
0000000090013963

%*[^:]:%s:
其它已经解释过了,这里说一下%s,这个%s放在这里和放在printf中是有区别的,放在printf中,它会对\r\n进行处理
放在这里意思是,遇到\r或者\n就结束读取字符到buff的过程。

后记:
sscanf的功能挺强大,虽然没有Linux下的的一些字符串处理工具强大,但足够用于一些常规的字符串解析了。

You may also like...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据