当前位置: 首页 > news >正文

C语言中的函数sscanf()用法

定义

int sscanf(     const char *buffer,     const char *format, [ argument ] ...   ); 

常规用法:

        //16进制字符串转unsigned charconst char* hex = "1e08ab7f38974cef";unsigned char shex[16];for (int i = 0; i < 16; i += 2)sscanf(hex + i, "%2x", &shex[i / 2]);for (int i = 0; i < 8; i++)printf("%02x", shex[i]);printf("\n");

进行%s、%d、%x等转换时,若不指定长度,它最多读到空格,它会以空格隔开;

即使指定更大的长度,它也会以空格为限。

sscanf就是按空格一段一段读取的

		char buf1[32], buf2[32];int n=0;sscanf("abc 123", "%s %s", buf1, buf2);printf("%s\n%s\n", buf1, buf2);//以上,原始字符串有空格,%s%s会把两个字符串读正确,buf1,buf2//两个%s之间的空格可有可无sscanf("abc 123", "%s %d", buf1, n);printf("%s\n%d\n", buf1, n);//sscanf("abc 123", "%5s", buf1);printf("%s\n", buf1);//即使你要读了5个字符,但有空格、只能给你abc

%[XXX]用法

你只要记住一点,不管是%[abc]、%[1-9a-z]、还是%[^A-Z],都是遇到哪些字符时就结束

%[abc]     是遇到不是abc结束;

%[1-9a-z] 是遇到不是1-9a-z结束;

%[^A-Z]   是遇到A-Z结束;

 看代码

		sscanf("123456abcdAedfBCDEF", "%[1-9a-z]", buf);printf("%s\n", buf);//结果为:123456abcd,而不是123456abcdedf,她遇到A就结束了sscanf("112323456abcdedfBCDEF11111111111", "%[123]", buf);printf("%s\n", buf);//结果为112323,而不是11232311111111111,遇到4就结束//取遇到大写字母为止的字符串。sscanf("123456abcdedfBCDEF", "%[^A-Z]", buf);printf("%s\n",buf);

%[^XXX]遇到那些字符时就把XXX之前的字符串赋给了对应变量;

此时还没完,后面的仍然可以继续读取赋值。那后面就从XXX开始了。

    char string[] = "192.168.0.10/24, 192.168.1.254";char address[16] = { 0 };char mask[16] = { 0 };char gateway[16] = { 0 };sscanf(string, "%[^/]/%[^,],%s", address, mask, gateway);
//%[^/]读到/结束,则把192.168.0.10赋给了address
//后面从/开始读了,
//格式/, %[^,]读到,结束,则把24赋给了mask
//再从,开始, 格式, , %s读到最后。。。printf("address=%s\n", address);printf("mask=%s\n", mask);printf("gateway=%s\n", gateway);

%[XXX]可以跟别的控制符实现更强功能,比如%*[abc]表示舍去开始连续是abc的字符、或者说从不是abc的字符开始。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Golang基于DTM的分布式事务TCC实战
  • Golang | Leetcode Golang题解之第343题整数拆分
  • 16.2 TensorFlow 与 Keras 基础
  • 图表:调用FluentUI中的折线图散点图和饼状图
  • 八股之数据库
  • 无缝融入,即刻智能[二]:Dify-LLM平台(聊天智能助手、AI工作流)快速使用指南,42K+星标见证专属智能方案
  • 第二章 pytorch回归问题
  • Java、python、php版的企业单位考勤打卡管理系统的设计与实现(源码、调试、LW、开题、PPT)
  • 深度学习·Pytorch
  • Java TCP练习1
  • 部署 K8s 图形化管理工具 Dashboard
  • 【与C++的邂逅】--- 类和对象(上)
  • 【数据结构-1】二叉树
  • haproxy负载均衡(twenty-eight day)
  • C# 重载运算符
  • ----------
  • 【译】JS基础算法脚本:字符串结尾
  • [LeetCode] Wiggle Sort
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • 2019年如何成为全栈工程师?
  • Android单元测试 - 几个重要问题
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • es6--symbol
  • Fabric架构演变之路
  • HTTP中GET与POST的区别 99%的错误认识
  • interface和setter,getter
  • Java 内存分配及垃圾回收机制初探
  • JS变量作用域
  • Mysql数据库的条件查询语句
  • oschina
  • PHP的类修饰符与访问修饰符
  • Redis字符串类型内部编码剖析
  • SpringCloud集成分布式事务LCN (一)
  • tweak 支持第三方库
  • Vue2.0 实现互斥
  • 初识 beanstalkd
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 计算机在识别图像时“看到”了什么?
  • 记录:CentOS7.2配置LNMP环境记录
  • 如何用vue打造一个移动端音乐播放器
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • Nginx实现动静分离
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (AngularJS)Angular 控制器之间通信初探
  • (BFS)hdoj2377-Bus Pass
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (七)理解angular中的module和injector,即依赖注入