c 按特定格式读取字符串的数据 sscanf的用法 匹配字符串 分割

简介Sscanf 函数 原型 int sscanf( const char *buffer, const char *format, [ argument ] ...   );  buffer 存储的数据 format 窗体控件字符串。 有关详细信息,请参阅"格式规范"。 argument 可选自变量 locale 要使用的区域设置 说明 sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。
Sscanf 函数
原型

int sscanf( const char *buffer, const char *format, [ argument ] ...   ); 

buffer 存储的数据
format 窗体控件字符串。 有关详细信息,请参阅"格式规范"。
argument 可选自变量
locale 要使用的区域设置

说明
sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。

控制字符说明
%c 一个单一的字符
%d 一个十进制整数
%i 一个整数
%e, %f, %g 一个浮点数
%o 一个八进制数
%s 一个字符串
%x 一个十六进制数
%p 一个指针
%n 一个等于读取字符数量的整数
%u 一个无符号整数
%[] 一个字符集
%% 一个精度符

函数返回值
函数将返回成功赋值的字段个数;返回值不包括已读取但未赋值的字段个数。 返回值为 0 表示没有将任何字段赋值。 如果在第一次读取之前到达字符串结尾,则返回EOF。

例程
代码

char buf[512];
sscanf("123456 ", "%s", buf);
printf("%s\n", buf);
//结果为:123456


//取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。
sscanf("123456 ", "%4s", buf);
printf("%s\n", buf);
//结果为:1234

//取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。
sscanf("123456 abcdedf", "%[^ ]", buf);
printf("%s\n", buf);
//结果为:123456

//取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。
sscanf("123456abcdedfBCDEF", "%[1-9a-z]", buf);
printf("%s\n", buf);
//结果为:123456abcdedf

//取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。
sscanf("123456abcdedfBCDEF", "%[^A-Z]", buf);
printf("%s\n", buf);
//结果为:123456abcdedf

//给定一个字符串iios/12DDWDFF@122,获取 / 和 @ 之间的字符串,先将 "iios/"过滤掉,再将非'@'的一串内容送到buf中
sscanf("iios/12DDWDFF@122", "%*[^/]/%[^@]", buf);
printf("%s\n", buf);
//结果为:12DDWDFF

//给定一个字符串"hello, world",仅保留"world"。(注意:“,”之后有一空格)
sscanf("hello, world", "%*s%s", buf);
printf("%s\n", buf);
//结果为:world

本文转自:https://blog.csdn.net/weixin_42078116/article/details/89891520
新加评论 评论标题:

文章评论

    固定格式字符串分割

        2020-01-13    
    修改 删除

    "a_b_c_d"

    sscanf(pull_name, "%[^_]_%[^_]_%[^_]_%[^_]", username, password, ip_port, streamType);


    不能直接用"%s_%s_%s_%s"分割,需要通过 %[^_] 指定分割终止位置。

评论列表
固定格式字符串分割