sscanf() - 从一个字符串中读进与指定格式相符的数据.
函数原型
Int sscanf( string str, string fmt, mixed var1, mixed var2 ... );
int scanf( const char *format [,argument]... );
说明:
sscanf与scanf类似,都是用于输入的,后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。
其中的format可以是一个或多个 {%[*] [width] [{h | l | I64 | L}]type | ' ' | '\t' | '\n' | 非%符号}
有以下几个注意点:
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 表示满足该条件的被过滤掉,不会向目标参数中写入值
支持集合操作:
%[a-z] 表示匹配a到z中任意字符
%[aB'] 匹配a、B、'中一员
%[^a] 匹配非a的任意字符
例子(来自个人经验,慢慢积累)
1.例如通过串口获得控制指令,控制指令的格式为ch,n。其中ch代表通道指令,n代表通道号,n为整数。
uint8_t channel_id = 0;
char buf[32];
uart_readbuf(buf,len);
sscanf(buf,"ch,%d",channel_id);
sscanf有返回值,返回值为匹配数量。
若当输入n为非法值时,返回值为0.否则为1.例如输入ch,x。修改以上代码:
uint8_t channel_id = 0;
char buf[32];
uart_readbuf(buf,len);
if( sscanf(buf,"ch,%d",channel_id) == 1)
{
// do something
}
例子(来自网上资料)
1. 常见用法
char buf[512] ;
sscanf("123456 ", "%s", buf);
printf("%s\n", buf);
结果为:123456
2. 取指定长度的字符串。
如在下例中,取最大长度为4字节的字符串。
sscanf("123456 ", "%4s", buf);
printf("%s\n", buf);
结果为:1234
3. 取到指定字符为止的字符串
如在下例中,取遇到空格为止字符串。
sscanf("123456 abcdedf", "%[^ ]", buf);
printf("%s\n", buf);
结果为:123456
4. 取仅包含指定字符集的字符串
如在下例中,取仅包含1到9和小写字母的字符串。
sscanf("123456abcdedfBCDEF", "%[1-9a-z]", buf);
printf("%s\n", buf);
结果为:123456abcdedf
5. 取到指定字符集为止的字符串
如在下例中,取遇到大写字母为止的字符串。
sscanf("123456abcdedfBCDEF", "%[^A-Z]", buf);
printf("%s\n", buf);
结果为:123456abcdedf
6.取到指定位置的内容
给定一个字符串iios/12DDWDFF@122,获取 / 和 @ 之间的字符串,先将 "iios/"过滤掉,再将非'@'的一串内容送到buf中
sscanf("iios/12DDWDFF@122", "%*[^/]/%[^@]",buf);
printf("%s\n", buf);
结果为:12DDWDFF
7.忽略某部分
给定一个字符串““hello, world”,仅保留world。(注意:“,”之后有一空格)
sscanf(“hello, world”, "%*s%s", buf);
printf("%s\n", buf);
结果为:world
%*s表示第一个匹配到的%s被过滤掉,即hello被过滤了
如果没有空格则结果为NULL。
8.时间格式处理
处理时间 格式XXXX-XX-XX
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int a, b, c;
sscanf("2013:02:21", "%d:%d:%d", &a, &b, &c);
printf("Date:%d-%d-%d",a,b,c);
return EXIT_SUCCESS;
}
分享到:
相关推荐
sscanf ,sscanf ,sscanf
sscanf的使用方法,可以直接拿来使用,很方便参考学习
sscanf函数的高级用法,在C程序中我们往往用它实现对各种复杂格式字符串的处理(解析),配合sprintf
sscanf函数的范例的用法和实例,使人尽快掌握sscanf的用法。
sscanf使用的时候有一个陷阱,存入的数是32的,如果不到32位,会发生内存越界!
C语言或者C++ 中的sscanf的一些操作练习进行详解,一般用来分割字符串; 如固定格式的ch = "\"aa bb cc\" \"dd ff gg\"";
sscanf函数的高级用法,非常好的资料,由KLC搜集整理,不敢独享,大家都来下载吧
在程序设计中有很多时候需要格式控制的,这时使用sscanf和sprintf就可以了
sscanf() 用法 dome Vs2010
详细的c语言正则表达式用法,sscanf的正则表达不会用的必看
sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。但是有点类似于正则表达式
c程序,可以帮你编写程序,他介绍了sscanf的偶那个发。
基于sscanf实现的json c解码库,体积非常小。实现了字符串,整数,浮点数的解析。纯c实现,易于移植。 只有几十行代码量,编译后体积不到1K。
sscanf用法例子 比较小 有兴趣就下
带有目录查询的fprintf、printf、sprintf、fscanf、scanf、sscanf_格式化输入输出
详细介绍sscanf函数的用法, 一看必然会用。。。。。。。
sscanf 正则表达式 format, 非常不错的资源,可以再也不用太担心sscanf的用法了
matlab_中sscanf__函数的使用