/* 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. 潭州课堂25班:Ph201805201 tornado 项目 第四课 增加用户注册登录(课堂笔记)

    tornado 相关说明 在 handlers 中创建个 auth.py 用来做用户登录,在这文件中创建个类,并逐步完善 在 tornado 中创建 login.html 文件,是个登录页面 {% e ...

  2. [CC-INVENTRY]Arranging the Inventory

    [CC-INVENTRY]Arranging the Inventory 题目大意: 有一排长度为\(n(\sum n\le10^6)\)的格子,有些格子是空的,有些格子上有一个箱子. 现在你要用最小 ...

  3. CY7C68013 USB接口相机开发记录 - 第一天:资料下载

    一直觉得从头开发一套东西出来会极大的提升自己的自信心,能够最大化的开发自己的潜能.所以在犹豫很久之后决定学习下CY7C68013 USB接口相机的开发. 通过在网上查找多份资料后,觉得工欲善其事必先利 ...

  4. BZOJ3536 : [Usaco2014 Open]Cow Optics

    枚举最后光线射到终点的方向,求出从起点出发以及从终点出发的光路,扫描线+树状数组统计交点个数即可. 注意当光路成环时,对应的两个方向应该只算一次. 时间复杂度$O(n\log n)$. #includ ...

  5. BZOJ2491 : Quelling Blade

    首先将合成树展开,得到一棵不超过$m(m\leq 10^6)$的有根树. 问题等价于,不休息地访问所有点,访问每个点需要时间$t_i$,价值为$v_i$. 设$vis_i$为访问$i$点的时间(不含$ ...

  6. BZOJ2616 : SPOJ PERIODNI

    长为$A$,宽为$B$的矩阵放$K$个车的方案数$=C(A,K)\times C(B,K)\times K!$. 建立笛卡尔树,那么左右儿子独立,设$f[i][j]$表示$i$子树内放$j$个车的方案 ...

  7. BZOJ1758[Wc2010]重建计划——分数规划+长链剖分+线段树+二分答案+树形DP

    题目描述 输入 第一行包含一个正整数N,表示X国的城市个数. 第二行包含两个正整数L和U,表示政策要求的第一期重建方案中修建道路数的上下限 接下来的N-1行描述重建小组的原有方案,每行三个正整数Ai, ...

  8. 编程菜鸟的日记-初学尝试编程-编写函数实现strcpy功能(总结考察点)

    char *Mystrcpy(char *strDest, const char *strSrc) //考察点1:将源字符串加const,表明为输入参数 {//考察点2:对源地址和目的地址的非0断言 ...

  9. 从web到搭建ssm环境

    1:我先建立了个web项目, (1)在pom.xml中添加了如下 <dependencies>        <!-- Spring -->        <depend ...

  10. jQuery Distpicker插件 省市区三级联动 动态赋值修改地址

    在获取创建页面数据后需要在编辑页面调取之前提交的数据,在使用这个插件后发现无法动态赋值,查找资料后发现需要先销毁实例,$(’#target’).distpicker(‘destroy’); 第一步 引 ...