/* 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. STM新建项目

    STM新建项目,为以后开发提供更好的平台,项目代码分级分类管理,便于查看. 1.新建一个文件夹,在里面分别新建固件库.内核.用户文件夹. 在网上下载STM32F10x_StdPeriph_Lib_V3 ...

  2. [BZOJ1814]Formula 1

    Description: 一个 m * n 的棋盘,有的格子存在障碍,求经过所有非障碍格子的哈密顿回路个数 Hint: \(n,m<=12\) Solution: 插头dp模板题,注意要讨论多种 ...

  3. 查看mysql数据库体积

    查看MySQL数据库大小 1.首先进入information_schema 数据库(存放了其他的数据库的信息) ? 1 2 mysql> use information_schema; Data ...

  4. Linq.js表达式常见写法

    1.回调函数法 2.lambda表达式字符串 3.$符号的表达式

  5. Yii2 baisic版gii的使用和分页

    一.Gii 的使用 1.配置 gii 的位置: 在 config/web.php 里面: if (YII_ENV_DEV) { $config['bootstrap'][] = 'gii'; $con ...

  6. Node爬取简书首页文章

    Node爬取简书首页文章 博主刚学node,打算写个爬虫练练手,这次的爬虫目标是简书的首页文章 流程分析 使用superagent发送http请求到服务端,获取HTML文本 用cheerio解析获得的 ...

  7. 如何修改CCS 7.2 代码和注释的颜色以及折叠代码

    默认的字体总是让人感觉很难受,作为一个热爱生活的人,工作的时候也得尽力创造一个舒适的环境----程序猿们,对自己好一点. 首先废话一下--------------------------------- ...

  8. vim设置一个tab为4个空格,设置行号

    这我就再当前用户下,不是root权限.本身是没有.vimrc这个文件的 vim  ~/.vimrc 新建了这个文件 然后在其中输入 保存. 这样设置完就一个tab是4个空格,并且就有行号了.重新打开v ...

  9. 小甲鱼Python第十四课后习题

    字符串格式化符号含义    符   号    说     明      %c    格式化字符及其ASCII码[>>> '%c' %97        'a']      %s    ...

  10. 【UML】Java代码与UML模型相互转换方法

    最近重温了一下设计模式,看到大家的博客里面都是Java代码+UML视图,UML表达整体框架,然后再秀出具体的代码,点面结合.一目了然.所以也研究了一下Java代码与UML模型相互转换方法. 一.常用的 ...