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` 解析字符串的具体示例: 1. **常规用法**: ```c char buf[512]; sscanf("123456", "%s", buf); printf("%s\n", buf); ``` 输出结果为:`123456` 2. **读取指定长度的字符串**: ...
### sscanf函数的高级用法详解 #### 一、sscanf函数概述 `sscanf`是C语言中的一个标准库函数,用于从一个字符串中解析指定格式的数据。它类似于`scanf`函数,但输入源不是标准输入(如键盘),而是用户指定的字符...
下面将详细介绍`sscanf`的使用方法、参数、返回值以及一些常见的使用场景。 `sscanf`函数的声明如下: ```c int sscanf(const char *str, const char *format, ...); ``` 1. **参数解析**: - `str`:这是要读取的...
压缩包内的`sscanf.c`文件可能包含了多个`sscanf`的使用案例,通过阅读和运行这些代码,开发者能够深入理解`sscanf`的工作原理以及在不同情况下的应用方法。而`db-4.6.21.tar.gz`文件,根据命名规则,这可能是...
本篇文章将深入讲解如何使用`sscanf`来有效地分割字符串。 `sscanf`函数的基本语法如下: ```c int sscanf(const char *str, const char *format, ...); ``` 这里,`str`是指向要读取的字符串的指针,`format`是一...
### sscanf函数的高级用法详解 #### 一、sscanf函数简介 `sscanf`是C语言中的一个标准库函数,用于从一个字符串中解析出指定格式的数据,并将其存储到对应的变量中。它与`scanf`函数非常相似,但不同之处在于`...
### sscanf陷阱:内存越界的隐患 #### 一、sscanf函数简介 `sscanf`是C语言中的一个标准库函数,用于从字符串中解析输入。它的工作方式类似于`scanf`函数,但`sscanf`是从指定的字符串中读取数据而不是从标准输入...
在Visual Studio 2010环境下,开发者经常使用`sscanf()`来处理字符串输入,特别是在需要从已有的字符串中解析特定格式的数据时。下面我们将详细介绍`sscanf()`函数的用法,并结合在VS2010中的应用进行深入探讨。 ##...
下面通过几个具体的例子来进一步理解`sscanf`的使用方法: ##### 1. 基础使用 ```c char buf[512]; sscanf("123456", "%s", buf); printf("%s\n", buf); ``` 结果为:123456 ##### 2. 指定长度的字符串 ```c ...
`sscanf()`的灵活性在于能够根据指定的格式从字符串中提取数据,并且可以使用`*`来忽略某些部分,或者使用`width`限制读取的长度。然而,对于更复杂的数据解析任务,尤其是涉及到正则表达式的情况,可能需要使用其他...
### sscanf和sprintf输入输出控制 #### 一、sscanf函数详解 **sscanf** 是一个强大的函数,用于从字符串中解析格式化的输入。它的工作原理类似于 **scanf** 函数,但是 **sscanf** 从一个字符串中读取数据而不是从...
### 关于sscanf函数 #### 一、简介 `sscanf`函数是C语言标准库中的一个重要函数,用于从字符串中解析数据,并将其存储到指定...不过,在面对更加复杂的字符串解析任务时,推荐使用正则表达式或其他高级文本处理技术。
详细的c语言正则表达式用法,sscanf的正则表达不会用的必看
- `{a|b|c}`:从`a`、`b`或`c`中选择一个使用。 - `[d]`:`d`是可选的。 - `width`:指定读取的最大字符数。 - `{h|l|I64|L}`:指定读取数据的大小。 - `h`:短整型。 - `l`:长整型。 - `I64`:64位整型。 - `L...
Matlab 中 sscanf 函数的使用 Matlab 中的 sscanf 函数是用于从一个字符串中读取与指定格式相符的数据。该函数的原型为 `Int sscanf( const char *, const char *, ...);`,其中第一个参数是一个字符串,第二个参数...
基于sscanf实现的json c解码库,体积非常小。实现了字符串,整数,浮点数的解析。纯c实现,易于移植。 只有几十行代码量,编译后体积不到1K。
sscanf用法例子 比较小 有兴趣就下