/* 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. 最小树形图——朱刘算法(Edmonds)

    定义:一个有向图,存在从某个点为根的,可以到达所有点的一个最小生成树,则它就是最小树形图. 朱刘算法实现过程: [在选出入边集后(看步骤1),若有向图中不存在有向环,说明该图就是最小树形图] 1,选入 ...

  2. 编程菜鸟的日记-初学尝试编程-易传媒笔试题(C++实现)

    题目:已知存在两个非递减的有序链表List1和List2,现在需要你将两个链表合并成一个有序的非递增序列链表List3,请用C++编码实现.(所有链表均为单链表结构) 思路:此处链表是否都有表头并没有 ...

  3. jemter模拟高并发访问(亲测ok)

    https://blog.csdn.net/a574258039/article/details/19549407

  4. GDB快速入门

    GDB快速入门 GDB(GNU DeBugger)是Linux下强大的C/C++调试器,纯命令行操作 启动 以下为测试代码 #include <stdio.h> int nGlobalVa ...

  5. bzoj 1005

    prufer序列 性质: 1.一棵n个结点的树可表示为长度 n-2 的prufer序列 2.每个结点出现在prufer序列中的次数==该结点的度 -1 公式推出来了,大数模板没有除法..等开学了Jav ...

  6. list-循环小练习(作业已交未交)

    报错 list index out of range : 超出下标   这个错误是因为在写stus列表的时候写成了如下stus=['小花,未交'] ,但是取下标的时候取的是stus[1]:实际该列表中 ...

  7. JS_高程2.在HTML中使用Javascript(2)

    1.延迟脚本defer 在<script>元素中设置defer属性,相当于告诉浏览器立即下载,但是延迟执行.<script>中的脚本会延迟到浏览器遇到</html> ...

  8. MUI学习01-MUI概括、使用前引入CSS及JS

    1.MUI含义 目标:追求性能体验,追求原生UI感觉 重要特征:轻量 优势:MUI不依赖任何第三方JS库,压缩后的JS和CSS文件仅有100+K和60+K 基础:MUI以iOS平台UI为基础,补充部分 ...

  9. python测试开发django-54.xadmin添加自定义页面

    前言 xadmin后台如何添加一个自己写的页面呢?如果仅仅是在GlobalSettings添加url地址的话,会丢失左侧的导航菜单和顶部的页面,和整体的样式不协调. 新增页面后希望能保留原来的样式,只 ...

  10. MySQL表最大能达到多少?

    MySQL 3.22限制的表大小为4GB.由于在MySQL 3.23中使用了MyISAM存储引擎,最大表尺寸增加到了65536TB(2567– 1字节).由于允许的表尺寸更大,MySQL数据库的最大有 ...