C语言 sscanf函数补充
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h> /* sscanf特殊用法补充 */ void test()
{
const char * p1 = "333<key:value>abcde";
const char * p2 = "<key:value>abcde";
int rc = ;
char buf1[] = { };
char buf2[] = { };
char buf3[] = { };
int index = ; /*
目标:
提取<>中的内容
*/ rc = sscanf(p1, "%[^<]<%[^>]>%n%s", buf1, buf2, &index, buf3);
printf("==11111==rc[%d]==buf1[%s]===buf2[%s]=buf3[%s]===index[%d]=====\n", rc, buf1, buf2, buf3, index);
/*
说明:
%n获取的是截止到>这个数据的长度,这个长度是相对于源字符串p1,而不是相对于%[^<],%n可以放在任何地方,他就是用来统计到当前位置的长度 特别强调,%n不包括在返回值中,这里rc的值是3,而不是4
*/ //注意点
memset(buf1, , );
memset(buf2, , );
memset(buf3, , );
index = ;
rc = sscanf(p2, "%[^<]<%[^>]>%n%s", buf1, buf2, &index, buf3);
printf("====2222222==rc[%d]==buf1[%s]===buf2[%s]=buf3[%s]===index[%d]=====\n", rc, buf1, buf2, buf3, index);
/*
强调:
当匹配p2时,什么都没有匹配到,原因是p2不符合%[^<]这个条件,p2以<开始,所以%[^<]匹配不到任何东西,需要注意这一点
强调sscanf匹配时,必须能匹配到数据,数据不可以不存在,这一点和正则不同
*/ } int main(int argc, char *argv[])
{
test();
printf("-----ok------\n");
getchar();
return ;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h> //sscanf指定检索长度 void test()
{
const char* p = "%8888asdas";
char buf[] = { };
int n = ; if (sscanf(p, "%%%x", &n))
{
printf("---111---[%d]------\n", n); //打印559242,因为提取的十六进制数是8888a
} if (sscanf(p, "%%%2x", &n))
{
printf("----22--[%d]------\n", n); //打印136,因为提取的十六进制数是88
} //说明: 其他提取方式类同,例如 %3s 表示提取3个字符
} int main()
{
test();
return ;
}
C语言 sscanf函数补充的更多相关文章
- c语言 sscanf()函数
sscanf()函数用于从字符串中读取指定格式的数据,其原型如下: int sscanf (char *str, char * format [, argument, ...]); [参数]参数 ...
- C语言sprintf和sscanf函数用法
以前刚用C语言的时候,觉得字符串很难处理,后来用多了,发现其实并非如此,C语言也提供了许多函数给程序员使用.今天记录一下两个常用的两个字符串处理函数:sprintf和sscanf 1. sprintf ...
- C语言sprintf与sscanf函数
1.前言 我们经常涉及到数字与字符串之间的转换,例如将32位无符号整数的ip地址转换为点分十进制的ip地址字符串,或者反过来.从给定的字符串中提取相关内容,例如给定一个地址:http://www.bo ...
- C语言sprintf与sscanf函数[总结]
sprintf函数 sprintf函数原型为 int sprintf(char *str, const char *format, ...).作用是格式化字符串,具体功能如下所示: (1)将数字变量转 ...
- sscanf函数——强大的C语言库函数
这个函数真的很强大,这篇随笔也将一直更新一些总结,直到涵盖大多数应用: eg1: 今天公司项目中从云端获取了一段字符串---"+CBC: 0,90,4090" 我想获取其中的数字0 ...
- sscanf函数和正则表达式
看了几篇介绍sscanf函数,真是发现自己好多东西没理解透,详细介绍使用在sscanf中使用正则表达式. 第一篇: 此文所有的实验都是基于下面的程序: char str[10]; for (int i ...
- 【学习笔记】【C语言】函数
一. 什么是函数 任何一个C语言程序都是由一个或者多个程序段(小程序)构成的,每个程序段都有自己的功能,我们一般称这些程序段为“函数”.所以,你可以说C语言程序是由函数构成的. 比如你用C语言编写了一 ...
- C语言的本质(15)——C语言的函数接口入门
C语言的本质(15)--C语言的函数接口 函数的调用者和其实现者之间存在一个协议,在调用函数之前,调用者要为实现者提供某些条件,在函数返回时,实现者完成调用者需要的功能. 函数接口通过函数名,参数和返 ...
- python3全栈开发-内置函数补充,反射,元类,__str__,__del__,exec,type,__call__方法
一.内置函数补充 1.isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object): pass obj = Foo() print(isinstan ...
随机推荐
- C++ STL hash表用法
C++ STL unordered_map用法 在C++11中,unordered_map作为一种关联容器,替代了hash_map,unordered_map的底层实现是hash表,所以被称为无序关联 ...
- svn 没有killall命令的解决方法 -bash: killall: command not found
debian.ubuntu系统下: apt-get install psmisc centos 下: yum install psmisc
- ELK日志分析系统搭建 windows
1 分别下载elk包 下载地址 https://www.elastic.co/cn/downloads 2 将这三个解压到同一个目录下,便于管理 3 elasticsearch不需要修改配置 默认即可 ...
- Mac下安装oh my zsh之后配置环境变量失效问题
背景:在刚拿到mac 的时候,使用了默认的bash,由于工作需要在电脑上安装了maven,在~/.bash_profile 文件中添加了maven的配置如下 $ cat ~/.bash_profile ...
- C#操作域用户ADHelper
在C#中操作域用户,在项目中写的帮助类: using System; using System.Collections.Generic; using System.DirectoryServices; ...
- 08 c++中运算符重载(未完成)
参考:轻松搞定c++语言 定义:赋予已有运算符多重含义,实现一名多用(比较函数重载) 运算符重载的本质是函数重载 重载函数的格式: 函数类型 operator 运算符名称(形参表列) { 重载实体 ...
- NumPy的Linalg线性代数库探究
1.矩阵的行列式 from numpy import * A=mat([[1,2,4,5,7],[9,12,11,8,2],[6,4,3,2,1],[9,1,3,4,5],[0,2,3,4,1]]) ...
- PS——使用切片工具切出透明图片
前言 最近有点烦,不说话~ 步骤 首先要保证您的格式为PSD且底色为透明 参考线 标出参考线,方便后面划分 切图 保存 效果
- java中异步调用注意
Future接口是Java标准API的一部分,在java.util.concurrent包中.Future接口是Java线程Future模式的实现,可以来进行异步计算. 有了Future就可以进行三段 ...
- GITHUB常见命令
1 常用 $ git remote add origin git@github.com:yeszao/dofiler.git # 配置远程git版本库 $ git pull origin master ...