1、前言
C库函数sscanf()和scanf()函数类似,前者用于从字符串中读取格式化输入,后者则是从键盘(stdin)中格式化输入,该函数的声明如下所示:
#include <stdio.h> int sscanf(const char *str, const char *format, ...);
参数说明:
- str:C语言中的字符串,该字符串作为函数检索数据的来源;
- format:C中的字符串,包含以下各项的一个或者多个:空格字符、非空格字符和format说明符;
对于format说明符的形式为[=%[*][width][modifiers][type=],format说明符讲解如下:
*:这是一个可选的星号,表示数据是从流stream中读取的,但是可以被忽视,它不存储在对应的参数中;
width:指定在当前中读取操作中的最大字符数;
modifiers:为对应的附加参数所指向的数据指定一个不同于整型(针对 d、i 和 n)、无符号整型(针对 o、u 和 x)或浮点型(针对 e、f 和 g)的大小: h :短整型(针对 d、i 和 n),或无符号短整型(针对 o、u 和 x) l :长整型(针对 d、i 和 n),或无符号长整型(针对 o、u 和 x),或双精度型(针对 e、f 和 g) L :长双精度型(针对 e、f 和 g);
type:一个字符,指定了要被读取的数据类型以及数据读取方式。
对于type类型说明符,详情如下:
c:单个字符,读取下一个字符,如果指定了一个不为1的width,函数会读取width个字符,并通过参数传递,将它们存储在数组中的连续位置,对应的参数类型为char *;
d:十进制数,数字前面的+或-号是可选的,对应的参数类型为int *;
e,E,f,g,G:浮点数,包含了一个小数点、一个可选的前置符号+或-、一个可选的后置字符e或E以及一个十进制数,对应的参数类型为float *;
o:八进制整数,对应的数据类型为int *;
s:字符串,函数将连续读取字符,直到遇到空格字符,对应参数类型为char *;
u:无符号的十进制数,对应参数类型为unsigned int *;
x,X:十六进制整数,对应参数类型为int *。
- 附加参数:该函数接受一系列的指针作为附加参数,每一个指针都指向一个对象,对象的类型由format字符串相应的%标签指定,参数与%标签的顺序相同。
2、sscanf()用法实例
3、小结