文档章节

PHP 7 zend_memnstr 注解及C++测试用例

c
 colin_86
发布于 07/04 17:09
字数 440
阅读 5
收藏 0
#include <iostream>
//strlen函数需要
#include <string.h>

//宏定义,没有具体任何意思,只是尽可能保留PHP7内核语法
#define EXPECTED(condition) (condition)

//函数申明
const char* zend_memnstr(const char* haystack, const char* needle, size_t needle_len, const char* end);

int main()
{

	char a[] = "abcdefg";
	char b[] = "bcd";

	char* a_p = a;
	char* end_p = a_p + strlen(a);
	const char* found = zend_memnstr(a, b, strlen(b), end_p);

	printf("%s,%s>>%s>>%d", a, b, found, found == NULL ? NULL : found - a_p);

	return 0;
}

/*
haystack 被匹配字符串指针
needle 匹配字符串指针
needle_len 匹配字符串长度
end 被匹配字符串结尾字符指针(通常字符串结尾值为'\0',ASCII值为0)
*/
const char* zend_memnstr(const char* haystack, const char* needle, size_t needle_len, const char* end)
{
	
	const char* p = haystack;
	const char ne = needle[needle_len - 1];
	ptrdiff_t off_p;
	size_t off_s;

	//匹配内容只有一个字符长度,直接用memchr内存操作函数简单比较即可
	if (needle_len == 1) {
		//end - p 指针相减获取字符长度
		return (const char*)memchr(p, *needle, (end - p));
	}

	//off_s 被匹配字符串长度
	off_p = end - haystack;
	off_s = (off_p > 0) ? (size_t)off_p : 0;


	//匹配字符串没有被匹配字符串直接返回NULL
	if (needle_len > off_s) {
		return NULL;
	}

	//匹配剩余长度没有匹配字符串长就不用匹配了
	end -= needle_len;
	//比较指针
	while (p <= end) {
		//*needle 地址值,也就是一个char
		//找到第一个char相同的地址,然后比较最后一个char,相同后才用内存函数memcmp比较
		if ((p = (const char*)memchr(p, *needle, (end - p + 1))) && ne == p[needle_len - 1]) {
			//首尾不需要比较只比较中间的即可
			if (!memcmp(needle + 1, p + 1, needle_len - 2)) {
				return p;
			}
		}

		if (p == NULL) {
			return NULL;
		}

		p++;
	}

	return NULL;
}

© 著作权归作者所有

上一篇: VS 2019 PHP7 编译
c
粉丝 3
博文 199
码字总数 29211
作品 0
成都
高级程序员
私信 提问
在Windows上编译PHP扩展组件的问题

这两天需要编译一个PHP扩展来实现特定的功能,参考了网上N多文章,最后发现两件宝贝,其一是phpscrew,另外一件是Cygwin。网站推广 首先编译phpscrew,以便有个感性的印象,编译通过没问题,...

网络营销
2012/01/13
69
0
Facebook揭秘HipHop项目 PHP程序大提速

编程效率高是PHP语言最大的特点,但是作为脚本语言,一直存在着CPU和内存使用效率不高的问题,直到HipHop for PHP的出现。Facebook神秘的PHP项目HipHop for PHP终于揭开面纱。这个项目由一个...

cailylove
2011/01/13
694
0
Facebook性能大提升的秘密:HipHop

facebook / hiphop-php https://github.com/facebook/hiphop-php Facebook神秘的PHP项目HipHop for PHP终于揭开面纱。这个项目由一个PHP到C++的转换程序,一个重新实现的PHP运行库,和许多常...

晨曦之光
2012/03/09
131
0
Facebook性能大提升的秘密:HipHop

Facebook神秘的PHP项目HipHop for PHP终于揭开面纱。这个项目由一个PHP到C++的转换程序,一个重新实现的PHP运行库,和许多常用PHP扩展的重写版本构成,目的是旨在加速和优化 PHP。 用Faceboo...

crazyinsomnia
2010/02/03
4.8K
13
Mac 编译&安装 PHP-CPP

What is PHP-CPP? A C++ library for developing PHP extensions. It offers a collection of well documented and easy-to-use classes that can be used and extended to build native ext......

王And木
2018/06/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Nginx 快速安装详解

一、Nginx Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамбле...

网络小虾米
20分钟前
4
0
技术分享 | slave_relay_log_info 表认知的一些展开

作者:胡呈清 slave_relay_log_info 表是这样的: mysql> select * from mysql.slave_relay_log_info\G *************************** 1. row *************************** Number_of_lin......

爱可生
22分钟前
3
0
nginx配置http访问自动跳转到https

server {listen 80;server_name www.域名.com;rewrite ^(.*) https://$server_name$1 permanent;}server {listen 443;server_name www.域名.com;root /home/www;ssl on;......

很好亦平凡ms
22分钟前
3
0
SpreadJS:一款中国研发的类Excel开发工具,功能涵盖Excel的 95% 以上

Excel 作为一款深受用户喜爱的电子表格工具,借助其直观的界面、出色的计算性能、数据分析和图表,已经成为数据统计领域不可或缺的软件之一。 基于Excel对数据处理与分析的卓越表现,把Excel...

葡萄城技术团队
22分钟前
3
0
用javafx框架tornadofx做了个天气预报的程序

class WeatherApp : App(WeatherView::class)class WeatherView : View("十五天天气预报") { val weatherVM: WeatherViewModel by inject() val controller: WeatherController by......

oschina4cyy
26分钟前
3
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部