一、sscanf

sscanf() - 从一个  int sscanf(const char *buffer,const char *format,[argument ]...);

  buffer 存储的数据   format 格式控制字符串   argument 选择性设定字符串   sscanf会从buffer里读进数据,依照argument的设定将数据写回。字符串中读进与指定格式相符的数据.

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

  1. 常见用法。

  char buf[512] ;   sscanf("123456 ", "%s", buf);//此处buf是数组名,它的意思是将123456以%s的形式存入buf中!   printf("%s\n", buf);   结果为:123456   2. 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。   sscanf("123456 ", "%4s", buf);   printf("%s\n", buf);   结果为:1234   3. 取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。   sscanf("123456 abcdedf", "%[^ ]", buf);   printf("%s\n", buf);   结果为:123456

4、格式字符串可以有多个

int data1,data2,data3,data4;

char a[]="192.16.1.1";

sscanf(a,"%d.%d.%d.%d",&data1,&data2,&data3,&data4);

printf("data1=%d,data2=%d,data=3%d,data=4%d\n",data1,data2,data3,data4);

结果为:data1 =192,data2 =16,data3= 1,data4 =1;

5\格式字符串可以有多个,可以非常方便的分割IP地址和MAC地址等数据

int data1,data2,data3,data4;

char a[]="192:16:1:1";

sscanf(a,"%d:%d:%d:%d",&data1,&data2,&data3,&data4);

printf("data1=%d,data2=%d,data=3%d,data=4%d\n",data1,data2,data3,data4);

结果为:data1 =192,data2 =16,data3= 1,data4 =1;

6、类似字符串中的用法

  用它来分隔类似这样的字符串2006:03:18:

  int a, b, c;


  sscanf("2006:03:18", "%d:%d:%d", &a, &b, &c);

  以及2006:03:18 - 2006:04:18:   char sztime1[16] = "", sztime2[16] = "";   sscanf("2006:03:18 - 2006:04:18", "%s - %s", sztime1, sztime2);   但是后来,我需要处理2006:03:18-2006:04:18   仅仅是取消了‘-’两边的空格,却打破了%s对字符串的界定。   我需要重新设计一个函数来处理这样的情况?这并不复杂,但是,为了使所有的代码都有统一的风格,我需要改动很多地方,把已有的sscanf替换成我自己的分割函数。我以为我肯定需要这样做,并伴随着对sscanf的强烈不满而入睡;一觉醒来,发现其实不必。   format-type中有%[]这样的type field。如果读取的字符串,不是以空格来分隔的话,就可以使用%[]。   %[]类似于一个正则表达式。[a-z]表示读取a-z的所有字符,[^a-z]表示读取除a-z以外的所有字符。   所以那个问题也就迎刃而解了:   sscanf("2006:03:18 - 2006:04:18", "%[0-9,:] - %[0-9,:]", sztime1, sztime2);

8、给定一个字符串"hello, world",仅保留world。(注意:","之后有一空格,%s遇空格停止,加*则是忽略第一个读到的字符串)

  sscanf("hello, world", "%*s%s", buf);   printf("%s\n", buf);   结果为:world    %*s表示第一个匹配到的%s被过滤掉,即hello被过滤了

二、sprintf函数:函数功能:把格式化的数据写入某个字符串

  sprintf 是个变参函数,定义如下:

  int sprintf( char *buffer, const char *format [, argument] ... );   除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数:

例子:
char* who = "I";
char* whom = "CSDN";
sprintf(s, "%s love %s.", who, whom); //产生:"I love CSDN. "  这字符串写到s中sprintf(s, "%10.3f", 3.1415626); //产生:" 3.142"

ssacanf\Sprintf格式化字符串相关推荐

  1. sprintf格式化字符串带来的注入隐患

    原文链接:https://paper.seebug.org/386/ 摘要点关键知识点 <?php$input = addslashes("%1$' and 1=1#"); ...

  2. php中sql格式化字符串,sqli注入-sprintf格式化字符串带来的注入隐患

    PHP中 sprintf()格式化输出详解 sprintf()函数把格式化的字符串写入变量中. arg1.arg2.++参数将被插入到主字符串中的百分号(%)符号处.该函数是逐步执行的.在第一个%符号 ...

  3. c语言中格式化字符串系列函数包括,解析C语言中常用的格式化输入、输出函数...

    fprintf(格式化输出数据至文件) 这个函数的功能类似于文件操作函数 fwrite();通过一个文件描述符将数据写入该文件描述符所指向的文件中. 函数定义: int fprintf(FILE * ...

  4. sprintf函数的格式化字符串_尚学堂百战程序员:Python 字符串处理

    一个字符不等价于一个字节,字符是人类能够识别的符号,而这些符号要保存到计算的存储中就需要用计算机能够识别的字节来表示.一个字符往往有多种表示方法,不同的表示方法会使用不同的字节数.这里所说的不同的表示 ...

  5. php sprintf u,PHP sprintf()格式化用法详解

    php sprintf函数是一个非常强大的函数,本篇文章特别记录一下php中的sprintf函数格式化字符串的相关用法. 定义和用法 sprintf() 函数把格式化的字符串写入一个变量中. 语法 s ...

  6. CTF(pwn)-格式化字符串漏洞讲解(一)

    例题讲解 https://blog.csdn.net/weixin_45556441/article/details/114081864 一.基本介绍 格式化字符串漏洞在通用漏洞类型库CWE中的编号是 ...

  7. c++字符串输入_【pwn】什么是格式化字符串漏洞?

    0x00 前言 格式化字符串漏洞是在CWE[1](Common Weakness Enumeration,通用缺陷枚举)例表中的编号为CWE-134,由于在审计过程中很容易发现该漏洞,所以此类漏洞很少 ...

  8. python中格式化字符串的作用_python中字符串格式化的意义(化妆)

    格式 描述 %%百分号标记 #就是输出一个% %c字符及其ASCII码 %s字符串 %d有符号整数(十进制) %u无符号整数(十进制) %o无符号整数(八进制) %x无符号整数(十六进制) %X无符号 ...

  9. bootstrap table格式化字符串_你要的PHP字符串处理函数都在这了!

    php中文网最新课程 每日17点准时技术干货分享 打印输出函数 说明 echo 输出一个或多个字符串 print 输出字符串 printf 输出格式化字符串 sprintf Return a form ...

最新文章

  1. 美通信与动力公司向WIN-T军事通信计划提供支持
  2. 清晰易懂的Numpy入门教程
  3. asp.net使用for循环实现Datalist的分列显示功能
  4. laravel 中添加自定义辅助函数helpers.php
  5. ios键盘done中文_IOS_IOS关闭键盘的方法,首先输入完成后按键盘上的done - phpStudy...
  6. java线程变量值_JAVA线程中对变量值的修改
  7. Type interface com.zhaoka.mapper.DatKcardKmMapper is not known to the MapperRegistry
  8. PAT乙级(1031 查验身份证)
  9. systemctl自定义service
  10. html5做一个相册_HTML5最新版本介绍
  11. 所谓中央空调VRV指的是什么
  12. esri-leaflet入门教程(4)-加载各类图层
  13. 执行计划之CONCATENATION
  14. iOS版本 不限速迅雷 企业证书打包的 https://www.pgyer.com/yZAv 密码 9800
  15. 初步认识马尔可夫链与马尔可夫链的简单应用
  16. pandas基础用法详解
  17. 如何使用数据库的SQLServer身份验证登陆
  18. 微信小程序实现瀑布流实例
  19. 《Linux From Scratch》第三部分:构建LFS系统 第七章:基本系统配置- 7.9. 创建 /etc/shells 文件...
  20. 永磁同步电机三相等效电路图_三相永磁同步电机之永磁体的等效

热门文章

  1. [模板]平面最近点对
  2. ImageMagick 打水印支持透明度设置
  3. electron 项目的搭建方式,借助 node 和 npm
  4. Linux:进程实例信息(/proc)
  5. 微信小程序设置底部导航栏目方法
  6. ida和idr机制分析(盘符分配机制)
  7. C#项目中常用到的设计模式
  8. 你必须很努力,才能看上去毫不费力
  9. 校验值的计算----移位算法
  10. springmvc 中文文档