由ffmpeg中avformat模块中的 URL_SCHEME_CHARS 看 strspn( ) 的妙用

在ffmpeg的avformat 模块中avio.c 对 URL_SCHEME_CHARS 的定义:

#define URL_SCHEME_CHARS                                "abcdefghijklmnopqrstuvwxyz"                        "ABCDEFGHIJKLMNOPQRSTUVWXYZ"                        "0123456789+-."

在 int ffurl_alloc()中有这样一句:

size_t proto_len = strspn(filename, URL_SCHEME_CHARS); //返回 4

此处“filename”类似于:

const char* filename = "rtsp://admin:[email protected]:554/h264/ch1/sub/av_stream";

由上面的filename的定义可以看出该字符串 无非就是大小写字母+数字以及一些符号例如“:” "//" "@" "/" 和“.”

如果想解析上面的这个字符串,并且从中取出一些需要的信息的话,使用 strspn()是一个不错的选择。

-----------------------------------------------------------------------------------------------------

补充一下strspn的功能:

strspn(str1,str2);

返回 str1 中第一个不在str2中出现的字符下标。

例:

size = strspn("4232987 is my qq card!","012345689");将返回7

另一个跟strspn相反的函数是:

strcspn(str1,str2);

返回 str1 中不匹配 str2中出现的字符下标。

例:

size = strcspn("my qq card is 4232987!","012345689");将返回14
时间: 2024-11-12 23:44:38

由ffmpeg中avformat模块中的 URL_SCHEME_CHARS 看 strspn( ) 的妙用的相关文章

解决python中selen模块中'list' object has no attribute 'send_keys'报错

程序在执行如下代码的时候报错'list' object has no attribute 'send_keys' 解决: 把find_elements_by_id方法改成find_element_by_id 参考: https://stackoverflow.com/questions/29957373/selenium-python-send-key-error-list-object-has-no-attribute 解决python中selen模块中'list' object has no

Python中collections模块中的Counter()类

最近在刷leetcode,发现很多题目的思路都很相似.其中,collections模块中的Counter()多次在习题中碰到,很有必要对该知识点总结一下,加深理解. 1.collections模块 collections模块自Python 2.4 版本之后,引入除了dict.list.set.tuple以外的一些特俗容器,分别是: namedtuple():factory function for creating tuple subclasses with named fields(versi

EBS 中iSupplier模块中的MAPPING_ID

在EBS的供应商模块中,有一个非常有意思的表 POS_SUPPLIER_MAPPINGS, 这个表中建立了supplier_reg_id,vendor_id,party_id之间的映射关系. 这个表中有一些小细节: 1.直接使用管理员添加的供应商是没有supplier_reg_id的. 2.邀请供应商自主注册的供应商在被审批通过之前是只有supplier_reg_id的. 3.使用接口等形式添加的供应商刚开始是不会在该表中存在的,直到供应商登录后对自己的信息做过一些管理才会建立映射,但是不会有s

java中try-catch模块中with语句块的作用

以前写try-catch时,遇到一些流.连接等对象,必定需要添加finally语句来关闭这些对象.今天突然发现try的with模块可以省略在finally手动关闭的动作,可以通过将这些对象定义在with模块中,然后在try语句完成后,自动close对象,前提需要该对象实现了AutoCloseable或Closeable接口.然后发现,这个特性其实在java7中就引入了,现在都java9了,才发现.很落伍啊!!!例如现在的写法: try (BufferedInputStream bis = new

Python中datetime模块中strftime/strptime函数

python中datetime模块非常好用,提供了日期格式和字符串格式相互转化的函数strftime/strptime 1.由日期格式转化为字符串格式的函数为: datetime.datetime.strftime() 2.由字符串格式转化为日期格式的函数为: datetime.datetime.strptime() 3.两个函数都涉及日期时间的格式化字符串,列举如下: %a 星期几的简写;如 星期三为Web %A 星期几的全称;如 星期三为Wednesday %b 月份的简写; 如4月份为Ap

Python:python中math模块中提供的基本数学函数

sin(x):求x的正弦 cos(x):求x的余弦 asin(x):求x的反正弦 acos(x):求x的反余弦 tan(x):求x的正切 atan(x):求x的反正切 hypot(x,y):求直角三角形的斜边长度 fmod(x,y):求x/y的余数 ceil(x):取不小于x的最小整数 floor(x):求不大于x的正大整数 fabs(x):求绝对值 exp(x):求e的x次幂 pow(x,y):求x的y次幂 log10(x):求x的以10位底的对数 sqrt(x):求x的平方根 pi:π的值

python中thread模块中join函数

http://www.cnblogs.com/vingi/articles/2657790.html for i in range(10): t = ThreadTest(i) thread_arr.append(t) for i in range(10): thread_arr[i].start() for i in range(10): thread_arr[i].join() 简单说,阻塞进程指导线程执行完毕.通用的做法是我们启动一批线程,最后join这些线程结束. 总结:1 join方法

sklearn中xgboost模块中plot_importance函数(特征重要性)

# -*- coding: utf-8 -*- """ ############################################################################### # 作者:wanglei5205 # 邮箱:[email protected] # 代码:http://github.com/wanglei5205 # 博客:http://cnblogs.com/wanglei5205 # 目的:学习xgboost的plot_i

flex中Button事件中的e.target

关于flex中的Button事件中的e.target. 今天想在事件中调用模块中的对象通过e.target获取单击的这个Button对象,但是可能是使用var btn:Button = e.target as Button居然会使得btn为空,这就让我很奇怪了.最后终于发现了,原来是因为主程序中获取的是spark这个包里面的<s:Button />对象,而模块中是使用 <mx:Button />这个对象而导致错误.解决方法: 将模块里面的<mx:Button />改为&