/* sscanf用法详解 */

#include <stdio.h>   /* sscanf头文件 */
#include <stdlib.h>
#include <string.h> /*
sscanf 读取格式化的字符串中的数据。
swscanf 是 sscanf 的宽字符版本;swscanf 的参数是宽字符串。 swscanf不处理 Unicode 全角十六进制或"兼容性区"字符。 除此以外,swscanf 和 sscanf 的行为完全相同。 函数语法
int sscanf(const char *str, const char *format, ...); 参数
str
输入源固定字符串
format
  格式化参数,format可以是一个或多个 {%[*] [width] [{h | l | I64 | L}]type | ' ' | '/t' | '/n' | 非%符号}
*/ void test()
{
/*
//* 亦可用于格式中, (即 %*d 和 %*s) 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中)
const char *p1 = "abcd123";
char buf1[32] = { 0 };
sscanf(p1, "%*[a-z]%s", buf1); //跳过字母
printf("-- buf1[%s]--\n", buf1); //[a|b|c]表示a,b,c中选一
const char *p2 = "3b";
char buf2_1[32] = { 0 };
char buf2_2[32] = { 0 };
sscanf(p2, "%[1|2|3]%c", buf2_1, buf2_2); //或运算符使用
printf("-- buf1[%s]--buf2_2[%s]---\n", buf2_1, buf2_2); //[d],表示可以有d也可以没有d。
const char *p3 = "b";
char buf3_1[32] = { 0 };
char buf3_2[32] = { 0 };
sscanf(p3, "%[3]%c", buf3_1, buf3_2); //无法提取任何数据
printf("-- buf1[%s]--buf2_2[%s]---\n", buf3_1, buf3_2); //[d],表示可以有d也可以没有d。
const char *p4 = "b";
char buf4_1[32] = { 0 };
char buf4_2[32] = { 0 };
sscanf(p4, "%c%[3]", buf4_1, buf4_2); //可以正常提取b
printf("-- buf1[%s]--buf2_2[%s]---\n", buf4_1, buf4_2);
//结论:sscanf提取字符串必须知道字符串的具体格式,使用上不如正则灵活 //width表示读取宽度。
const char *p5 = "abcdef123";
char buf5_1[32] = { 0 };
char buf5_2[32] = { 0 };
sscanf(p5, "%3s%s", buf5_1, buf5_2); //%3s 表示提取3个字符的字符串
printf("-- buf1[%s]--buf2_2[%s]---\n", buf5_1, buf5_2); // h|I|I64 是配合%d提取整数使用 L 是配合%f提取浮点数使用,h表示short类型数据,I表示int类型数据,I64表示长整型数据
const char *p6 = "123578abc";
int buf6_1;
char buf6_2[32] = { 0 };
sscanf(p6, "%Id%s", &buf6_1, buf6_2);
printf("-- buf1[%d]--buf2_2[%s]---\n", buf6_1, buf6_2); //控制字符
// %c 一个单一的字符
// %d 一个十进制整数
// %i 一个整数
// %e, %f, %g 一个浮点数
// %o 一个八进制数
// %s 一个字符串
// %x 一个十六进制数
// %p 一个指针
// %n 一个等于读取字符数量的整数
// %u 一个无符号整数
// %[] 一个字符集
// %% 一个精度符号
const char *p7 = "123578abc";
char ch7 = 0;
char buf7_2[32] = { 0 };
sscanf(p7, "%c%s", &ch7, buf7_2);
printf("-- buf1[%c]--buf2_2[%s]---\n", ch7, buf7_2); //sscanf函数遇到空格停止读取字符串,所有需要特地注明空格
const char *p8 = "123 578a bc";
char buf8_1[32] = { 0 };
char buf8_2[32] = { 0 };
sscanf(p8, "%s%*[ ]%s", buf8_1,buf8_2); //格式化里有空格,可以提取
printf("-- buf1[%s]--buf2_2[%s]---\n", buf8_1, buf8_2); //^ 取到指定字符为止的字符串
const char *p9 = "123abc";
char buf9_1[32] = { 0 };
char buf9_2[32] = { 0 };
sscanf(p9, "%[^2]%s", buf9_1,buf9_2);
printf("-- buf1[%s]--buf2_2[%s]---\n", buf9_1, buf9_2); //截取到指定字符串 "3ab"
const char *p10 = "12-3ab-c";
char buf10_1[32] = { 0 };
char buf10_2[32] = { 0 };
sscanf(p10, "%*[^-]-%[^-]%s", buf10_1, buf10_2);
printf("-- buf1[%s]--buf2_2[%s]---\n", buf10_1, buf10_2);
*/ //%n的使用,返回前一个提取字符个数,一般
const char *p11 = "12345dfg";
int num = ;
sscanf(p11, "%*d%n%*s", &num);
printf("-- buf1[%d]--buf2[%s]--\n", num, p11 + num);//注意其用法,节省内存,通过偏移量展示字符串 } int main()
{
test();
printf("-----ok------\n");
getchar();
return ;
}

C语言 sscanf用法详解的更多相关文章

  1. C语言printf用法详解

    #include <stdio.h> int main() { printf("%s","hello world1!\n");//%s字符标志可省略 ...

  2. Java语言Socket接口用法详解

    Socket接口用法详解   在Java中,基于TCP协议实现网络通信的类有两个,在客户端的Socket类和在服务器端的ServerSocket类,ServerSocket类的功能是建立一个Serve ...

  3. C语言对文件的操作函数用法详解2

    fopen(打开文件) 相关函数 open,fclose 表头文件 #include<stdio.h> 定义函数 FILE * fopen(const char * path,const  ...

  4. C语言对文件的操作函数用法详解1

    在ANSIC中,对文件的操作分为两种方式,即: 流式文件操作 I/O文件操作 一.流式文件操作 这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下: typedef str ...

  5. golang格式化输出-fmt包用法详解

    golang格式化输出-fmt包用法详解 注意:我在这里给出golang查询关于包的使用的地址:https://godoc.org    声明: 此片文章并非原创,大多数内容都是来自:https:// ...

  6. CSS中伪类及伪元素用法详解

    CSS中伪类及伪元素用法详解   伪类的分类及作用: 注:该表引自W3School教程 伪元素的分类及作用: 接下来让博主通过一些生动的实例(之前的作业或小作品)来说明几种常用伪类的用法和效果,其他的 ...

  7. C语言内存对齐详解(2)

    接上一篇:C语言内存对齐详解(1) VC对结构的存储的特殊处理确实提高CPU存储变量的速度,但是有时候也带来了一些麻烦,我们也屏蔽掉变量默认的对齐方式,自己可以设定变量的对齐方式.VC 中提供了#pr ...

  8. MultiByteToWideChar和WideCharToMultiByte用法详解, ANSI和UNICODE之间的转换

    //========================================================================//TITLE://    MultiByteToW ...

  9. extern用法详解

    1 基本解释 extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义. 另外,extern也可用来进行链接指定. 2 问题:ext ...

随机推荐

  1. tomcat环境变量详细配置步骤

    这篇文章主要为大家详细介绍了tomcat环境变量配置步骤,包括JDK环境变量配置,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了tomcat环境变量的配置教程,供大家参考,具体内容如下 1.=== ...

  2. [蓝点ZigBee] Zstack 之按键驱动以及控制LED灯 ZigBee/CC2530 视频资料

    这一节主要演示如何在Zstack 下根据板子的不同修改按键驱动,实际演示的时候代码跳动比较多,建议大家除了看视频资料以外,还需要在网上找一下相关资料进一步学习. 视频总览:http://bphero. ...

  3. KTV项目之3个ListView的跳转和加载歌手图片

    第一个ListView: 第二个ListView: 第三个ListView: 定义一个KTVUtil类,在里面定义一个静态变量保存歌手图片 //定义一个静态变量保存歌手图片路径 public stat ...

  4. Java 基础 集合框架

    Java中的集合从类的继承和接口的实现结构来说,可以分为两大类: 1 继承自Collection接口,包含List.Set和Queue等接口和实现类. 2 继承自Map接口,主要包含哈希表相关的集合类 ...

  5. git使用,提交代码简记

    强制覆盖本地修改:git reset --hard 项目初始时获取前端代码: git clone https://git.oschina.net/yudian/yudian-frontend.git ...

  6. keystone 安装随笔

    keystone 代码库 git clone https://git.openstack.org/openstack/keystone.git cd keystone keystone配置文件 etc ...

  7. 用DirectX实现多视图渲染

    什么是多视图 一般的3D程序都只有一个视图,对应整个窗口的客户区.多视图就是在一个窗口中放置多个视图,以便从不同的角度观察模型或者场景.很多图形软件都有这个功能,比如大家熟知的3DMax就有四个视图, ...

  8. iOS:给标签栏控制器的UITabbarItem添加点击动效

    一.介绍 现在很多app,附带很炫的点击效果,让用户享受到非常棒的体验,例如动画.渐变.音效等. 当然,市面上大多数app的标签栏点击还是挺中规中矩的,只是切换图片而已.然而,这个是可以优化的,附带点 ...

  9. 微信小程序生成指定页面小程序码海报图片分享思路总结

    本博客主要说下思路,具体代码不贴 1.考虑到组件复用,所以我把它做成一个自定义的组件 <my-poster id="getPoster" avater="{{ima ...

  10. Visual Studio进行Web性能测试- Part III

    Visual Studio进行Web性能测试- Part III 原文作者:Ambily.raj 对于一个多用户的应用程序,性能是非常重要的.性能不仅是执行的速度,它包括负载和并发方面.Visual ...