sscanf()用法详细介绍
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
sscanf()用法详细介绍
1.名称
函数原型:
int sscanf( const char *, const char *, ...);
int sscanf(const char *buffer,const char *format,[argument ]...);
buffer存储的数据
format格式控制字符串
argument 选择性设定字符串
sscanf会从buffer里读进数据,依照format的格式将数据写入到argument里。
2.头文件
#include
3.返回值
成功则返回参数数目,失败则返回-1,错误原因存于errno中。
经多次测试,在linux系统中成功返回的是全部参数值减2,例如:
sscanf("1 2 3","%d %d %d",buf1, buf2, buf3); 成功调用返回值为3,即buf的数量(总参数个数减前两个)。
(注意:此处buf均为地址)
4.说明
sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。
第二个参数可以是一个或多个{%[*] [width] [{h | I | 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 表示满足该条件的被过滤掉,不会向目标参数中写入值
失败返回0 ,否则返回格式化的参数个数
5.支持集合操作
%[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配),在keil mdk中不支持“a-z”这种写法
%[aB'] 匹配a、B、'中一员,贪婪性
%[^a] 匹配非a的任意字符,并且停止读入,贪婪性
6.例子
1.sscanf默认以空格分割字符串。
结果为:123456
2.取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。
结果为:1234
3.取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。
结果为:123456
4.取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。
结果为:123456abcdedf
5.取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。
结果为:123456abcdedf
6.给定一个字符串iios/12DDWDFF@122,获取/ 和@ 之间的字符串,先将"iios/"过滤掉,再将非'@'的一串
内容送到buf中。
结果为:12DDWDFF
7.给定一个字符串“hello, world”,仅保留world。(注意:“,”之后有一空格)
结果为:world
%*s表示第一个匹配到的%s被过滤掉,即hello被过滤了,如果没有空格则结果为NULL,因默认以空格作为字符串的分隔符。
8.提取字符串中的英文单词
结果为:s1=try,s2=delete
scanf的format中出现的非转换字符(%之前或转换字符之后的字符),是用来跳过输入中的相应字符,在此例中即1234。
‘[]’的含义与正则表达式中相同,表示匹配其中出现的字符序列;^表示相反。使用[ ]时接收输入的变量必须是有足够存储空间的char、signed char、unsigned char数组。记住[也是转换字符,所以没有s了。
9.分割以某字符标记的字符串。
10.格式化时间
结果为:2013-02-13 14:55:34
format-type中有%[]这样的type field。如果读取的字符串,不是以空格来分隔的话,就可以使用%[]。
结果为:2006:03:18 2006:04:18
11.一个提取用户个人资料中邮件地址的例子
关键是"%*[^:]:%[^;]"和"%*[^:]:%s"这两个参数的问题
%*[^:] 表示满足"[]"里的条件将被过滤掉,不会向目标参数中写入值。这里的意思是在第一个':'之前的字符会在写入时过滤掉,'^'是表示否定的意思,整个参数翻译成白话就是:将在遇到第一个':'之前的(不为':'的)字符全部过滤掉。:自然就是跳过':'的意思。
%[^;] 拷贝字符直到遇到';'。