目录
- 🎈个人主页🎈:linux_嵌入式大师之路的博客-CSDN博客
- 🐻十年嵌入式开发经验🐻
- 🎉🎉🎉欢迎 👍点赞✍评论⭐收藏
- 🤝希望本文能对你有所帮助,欢迎在评论区交流讨论!🤝
1. 包含头文件
#include <stdio.h>
2. 函数语法:
int sscanf(const char *str, const char *format, ...);
说明:
str: 待解析的字符串;
format: 字符串格式,可以是一个或多个 {%[*] [width] [{h | I | I64 | L}]type | ' ' | '\t' | '\n' | 非%符号};
- * 亦可用于格式中, (即 %*d 和 %*s) 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中)
- {a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。
- width表示读取宽度。
- {h | l | I64 | L}:参数的size,通常h表示单字节size,I表示2字节 size,L表示4字节size(double例外),l64表示8字节size。
- type :这就很多了,就是%s,%d之类。
- 特别的:%*[width] [{h | l | I64 | L}]type 表示满足该条件的被过滤掉,不会向目标参数中写入值,失败返回0 ,否则返回格式化的参数个数
- 如果读取的字符串,不是以空格来分隔的话,就可以使用%[]。
返回值:返回成功赋值的个数;返回值为 0 表示没有将任何字段赋值。成功则返回参数数目,失败则返回-1,错误原因存于errno中;
3. 基础用法
将已知的字符串通过格式化匹配出有效信息。sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。
读取整数:
#include <stdio.h>
int main(void)
{
char string[] = "123";
int value;
sscanf(string,"%d", &value);
printf("value=%d\n", value);
return 0;
}
输出结果: value=123
读取字符串:
#include <stdio.h>
int main(void)
{
char string[] = "hello world";
char c1[16];
char c2[16];
sscanf(string,"%s%s",c1, c2);
printf("c1=%s, c2=%s\n", c1, c2);
return 0;
}
输出结果: c1=hello, c2=world
4. 高级用法
- %*s或%*d 跳过数据
- %[width]s 读指定宽度的数据
- %[a-z] 匹配a到z中任意字符(尽可能多的匹配)
- %[abc] 匹配a、b、c中一员,贪婪性
- %[^a] 匹配非a的任意字符,贪婪性
- %[^a-z] 表示读取除a-z以外的所有字符
解析固定宽度:
#include <stdio.h>
int main(void)
{
unsigned int info = 0;
char *ptr = &info;
if(sscanf("192.168.1.10", "%hhu.%hhu.%hhu.%hhu", &ptr[0], &ptr[1], &ptr[2], &ptr[3]) != 4)
{
printf("parse faild\n");
}
else
{
printf("info = %hhu %hhu %hhu %hhu\n", ptr[0], ptr[1], ptr[2], ptr[3]);
}
return 0;
}
运行结果:info = 192 168 1 10
读取IP:
#include <stdio.h>
int main(void)
{
char string[] = "192.168.1.10/24, 192.168.1.254";
char address[16] = {0};
char mask[16] = {0};
char gateway[16] = {0};
sscanf(string, "%[^/]/%[^,],%s", address, mask, gateway);
printf("address=%s\n", address);
printf("mask=%s\n", mask);
printf("gateway=%s\n", gateway);
return 0;
}
输出结果:
address=192.168.1.10
mask=24
gateway=192.168.1.254
本文围绕Linux环境下的sscanf函数展开,介绍了其包含的头文件,详细说明了函数语法,包括参数含义、返回值情况。还阐述了基础用法,即从已知字符串格式化匹配有效信息,以及高级用法,如跳过数据、读取指定宽度数据等。
&spm=1001.2101.3001.5002&articleId=132147481&d=1&t=3&u=b58e9b3e14f14a45b42ec2a970aa9bf5)
2万+

被折叠的 条评论
为什么被折叠?



