sscanf函数——强大的C语言库函数
这个函数真的很强大,这篇随笔也将一直更新一些总结,直到涵盖大多数应用:
eg1:
今天公司项目中从云端获取了一段字符串---"+CBC: 0,90,4090"
我想获取其中的数字0,90,4090.我们当然可以写一个函数,判断,并且逐一取值,然后再糅合成想要的数据,但是这样也真的太麻烦了,于是sscanf就来了。
#include<stdio.h>
int main(void)
{
int a;
int b;
int c;
char *s="+CBC: 0,90,4090";
sscanf(s,"+CBC: %d,%d,%d",&a,&b,&c);
printf("%d %d %d\n",a,b,c);
return ;
}

是不是很简单就完成了字符串中数字提取,而且可以格式化输入。
其中需要注意的是,一定要对应清楚,上面字符串中 +CBC: (空格)所以在sscanf中也一定要对应,空格别人有,你也得有,还有就是格式化的时候,如果以字符输入的形式,只能读取一个字节(当然是在char为一个字节的机器上)。
#include<stdio.h>
int main(void)
{
int a;
int b;
char c;
char *s="+CBC: 0,90,4090";
sscanf(s,"+CBC: %d,%d,%c",&a,&b,&c);
printf("%d %d %c\n",a,b,c);
return ;
}
上面红色部分,只是改成%c的形式,输出将只有一个字节:

sscanf函数,是把一个字符串按照格式化输入到指定内存中,常用于字符串转化成十进制,十六进制,获取指定位置的指定类型值。但是它却支持如同正则表达式一样的东西。
eg2:
#include<stdio.h>
int main(void)
{
char str[];
char *s="abcdefghijk";
sscanf(s,"%6s",str);
printf("%s\n",str);
return ;
}

如果我们传输的字符串没有到达末尾的'\0',就如同上面的例子那样,那么sscanf会在字符串后面给我们加上'\0'以表示字符串结束标志,所以我上面才敢直接使用。虽然翻了C语言标准它并未提及这个。
eg3:取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串,只要不是空格就读取:
#include<stdio.h>
int main(void)
{
char str[];
char *s="kongge jieshu";
sscanf(s,"%[^ ]",str);//注意^后面有个空格
printf("%s\n",str);
// for(int i=0;i<10;i++)
// printf("%c ",str[i]);
return ;
}

eg4:取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。
#include<stdio.h>
int main(void)
{
char buf[]; char *s="123456aAbBcCdDeEfF";
sscanf(s, "%[1-9a-z]", buf);
printf("%s\n", buf); char *s1="123456abcdefABCDEF";
sscanf(s1, "%[1-9a-z]", buf);
printf("%s\n", buf);
return ;
}

只匹配制定字符集,遇到第一个不满足的就停止了,如输出的第一行,如果前面都是满足要求的,遇到不满足的就停止,如输出的第二行。
eg5:给定一个字符串lios/hello world@122,获取 / 和 @ 之间的字符串:
先将 "lios/"过滤掉,再将'@'前的一串内容送到buf中。
#include<stdio.h>
int main(void)
{
char buf[];
sscanf("lios/hello world@122", "%*[^/]/%[^@]", buf);
printf("%s\n", buf);
return ;
}

*[^/]/:表示任意字符,直到/符号停止(不匹配/字符)->得到lios,然后*[^/]后面又一个/:在上面就表示lios/
[^@]:表示直到@停止,这样操作之后,取得就是/到@之间的字符。
如果你不懂基础的正则表达式语法,看起来会很吃力,推荐掌握正则表达式,大大提高编程效率。
sscanf远远不止这点作用,更多待续...
sscanf函数——强大的C语言库函数的更多相关文章
- c语言 sscanf()函数
sscanf()函数用于从字符串中读取指定格式的数据,其原型如下: int sscanf (char *str, char * format [, argument, ...]); [参数]参数 ...
- C语言sprintf和sscanf函数用法
以前刚用C语言的时候,觉得字符串很难处理,后来用多了,发现其实并非如此,C语言也提供了许多函数给程序员使用.今天记录一下两个常用的两个字符串处理函数:sprintf和sscanf 1. sprintf ...
- C语言sprintf与sscanf函数
1.前言 我们经常涉及到数字与字符串之间的转换,例如将32位无符号整数的ip地址转换为点分十进制的ip地址字符串,或者反过来.从给定的字符串中提取相关内容,例如给定一个地址:http://www.bo ...
- C语言sprintf与sscanf函数[总结]
sprintf函数 sprintf函数原型为 int sprintf(char *str, const char *format, ...).作用是格式化字符串,具体功能如下所示: (1)将数字变量转 ...
- sscanf函数和正则表达式
看了几篇介绍sscanf函数,真是发现自己好多东西没理解透,详细介绍使用在sscanf中使用正则表达式. 第一篇: 此文所有的实验都是基于下面的程序: char str[10]; for (int i ...
- C语言库函数大全及应用实例十二
原文:C语言库函数大全及应用实例十二 [编程资料]C语言库函数大全及应用实例十二 函数名: setrgbpalette ...
- C语言库函数大全及应用实例十四
原文:C语言库函数大全及应用实例十四 [编程资料]C语言库函数大全及应用实例十四 函数名: strset 功 能: 将一个串 ...
- C语言库函数大全及应用实例十三
原文:C语言库函数大全及应用实例十三 [编程资料]C语言库函数大全及应用实例十三 函数名: stat 功 能: 读取打 ...
- C语言库函数大全及应用实例十一
原文:C语言库函数大全及应用实例十一 [编程资料]C语言库函数大全及应用实例十一 函数名: setbkcolor 功 能 ...
随机推荐
- Rplidar学习(二)—— SDK库文件学习
SDK头文件介绍 1.头文件简介: rplidar.h //一般情况下开发的项目中仅需要引入该头文件即可使用 RPLIDAR SDK 的所有功能. rplidar_driver.h //定义了 SDK ...
- Block(二)内存管理与其他特性-b
一.block放在哪里 我们针对不同情况来讨论block的存放位置: 1.栈和堆 以下情况中的block位于堆中: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
- C语言中 不定义结构体变量求成员大小
所谓的求成员大小, 是求成员在该结构体中 用 sizeof(结构体名.结构体成员名) 求来的. 很多时候我们需要知道一个结构体成员中的某个成员的大小, 但是我们又不需要定义该结构体类型的变量(定义的话 ...
- 探讨android更新UI的几种方法
作为IT新手,总以为只要有时间,有精力,什么东西都能做出来.这种念头我也有过,但很快就熄灭了,因为现实是残酷的,就算一开始的时间和精力非常充足,也会随着项目的推进而逐步消磨殆尽.我们会发现,自己越来越 ...
- Oracle 12C -- 删除audit policy
删除之前,必须将policy disable掉:然后再删除 SQL> noaudit policy audit_sysprvi_po01; SQL> drop audit policy a ...
- git 使用经验与技巧总结 (不断更新中)
git 使用技巧总结 说明: 本地repo已经有啦,对应的远程repo 为tiger, 本地分支为master. 问题一: 当拉取代码的remote repo仓库为tiger, 而现在要将修 ...
- Springboot使用junit
1. 首先要下载配套的spring-boot-starter-test包,注意版本要对应. compile("org.springframework.boot:spring-boot-sta ...
- 缓存机制和Hibernate的缓存机制介绍
缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能.缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事 ...
- Java 8 – Filter a null value from a Stream
Java 8 – Filter a null value from a Stream package com.mkyong.java8; import java.util.List;import ja ...
- Tcp超时修改
Linux 建立 TCP 连接的超时时间分析 tags: linux | network Linux 系统默认的建立 TCP 连接的超时时间为 127 秒,对于许多客户端来说,这个时间都太长了, 特别 ...