url截断技术巧用指针

原创 2015年11月19日 13:58:21

使用url截断的时候,我们一般希望从url得到site、port、path。这是最节省内存的方法就是巧用内存。


举个例子。一个url   :http://write.blog.csdn.net/postedit?ref=toolbar

传进来一个url,我们直接把port与path的分界线"/"的值返回path(指针),得到了path然后把"\"写成“\0”。

然后把":"后一位的数字传给port因为之前的\已经被写成\0了,所以这里能直接得到8080.再把:写成\0.

最后直接把url+7转给site就能得到  write.blog.csdn.net

至此,没有创建新的内存直接截断url。


具体实现如下:

int x_parse_url(const char *input, char *site, char *port, char *path)
00766 {
00767     char              tmp[GL_MAX_URL_LEN];
00768     char              *pin = tmp;
00769     char              *p, *q;
00770     char              *p_query = NULL;
00771     if (strlen(input) >= GL_MAX_URL_LEN)
00772     {
00773         write_log(GL_LOG_DEBUG, "x_parse_url: url is too long");
00774         return 0;
00775     }
00776     strcpy(tmp, input);
00777     x_delete_inter(tmp);
00778     if (strncasecmp(pin, "http://", 7) == 0)
00779     { pin += 7; }
00780     //get path
00781     p = strchr(pin, '/');
00782     p_query = strchr(pin, '?');
00783     if (NULL == p)
00784     {
00785         p = p_query;
00786     }
00787     if ((NULL != p_query) && (p_query <= p))
00788     {
00789         if (path != NULL)
00790         {
00791             path[0] = '\0';
00792             if (strlen(p_query) < GL_MAX_PATH_LEN - 1)
00793             {
00794                 strncpy(path, "/", 2);
00795                 strcat(path, p_query);
00796             }
00797             else
00798             { return 0; }
00799         }
00800         *p_query = '\0' ;
00801     }
00802     else
00803     {
00804         if (p != NULL)
00805         {
00806             if (path != NULL)
00807             {
00808                 path[0] = '\0';
00809                 if (strlen(p) < GL_MAX_PATH_LEN)
00810                 { strcpy(path, p); }
00811                 else
00812                 { return 0; }
00813             }
00814             *p = '\0';
00815         }
00816         else
00817         {
00818             if (path != NULL)
00819             {
00820                 strcpy(path, "/");
00821             }
00822         }
00823     }
00824     q = strchr(pin, ':');
00825     //get port
00826     if (q != NULL)
00827     {
00828         if (port != NULL)
00829         {
00830             port[0] = '\0';
00831             if (strlen(q) < GL_MAX_PORT_LEN && atoi(q + 1) > 0)
00832             {
00833                 strcpy(port, q + 1);
00834             }
00835             else
00836             { return 0; }
00837         }
00838         *q = '\0';
00839     }
00840     else
00841     {
00842         if (port != NULL)
00843         { port[0] = '\0'; }
00844     }
00845     //check if the default port
00846     if ((port != NULL) && (strncmp(port, "80", 3)) == 0)
00847     {
00848         port[0] = 0;
00849     }
00850     //get site
00851     if (site != NULL)
00852     {
00853         site[0] = '\0';
00854         if (pin[0] != '\0' && strlen(pin) < GL_MAX_SITE_LEN)
00855         {
00856             strcpy(site, pin);
00857         }
00858         else
00859         {
00860             write_log(GL_LOG_DEBUG, "x_parse_url: site name too long or empty url[%s]", pin);
00861             return 0;
00862         }
00863     }
00864     return 1;
00865 }

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

巧用Android网络通信技术,在网络上直接传输对象

转载自郭神的博客 看原创猛戳 点击打开链接 要做一个优秀的Android应用,使用到网络通信技术是必不可少的,很难想象一款没有网络交互的软件最终能发展得多成功。那么我们来看一下,一般Android...

逆天了word 90后:情人节巧用小小技术就俘获了女神

免责声明: 本文仅限于娱乐、技术交流学习,不得攻击他人或从事非法活动,若产生法律责任与本人及团队无关!引言时光如梭,转眼间元宵已过,各行各业都进入正常工作状态。恰逢情人节,今天小翊与泽友们分享一篇黑...

巧用Android网络通信技术,在网络上直接传输对象

要做一个优秀的Android应用,使用到网络通信技术是必不可少的,很难想象一款没有网络交互的软件最终能发展得多成功。那么我们来看一下,一般Android应用程序里都是怎么实现网络交互的,这里拿一个Bo...

巧用SEO技术,速提自然流量

网站转化率的基本是网站流量,稳定网站排名的基本因素也是流量,由此看来,网站自然流量对于网站优化运营而言是一个关键性的存在。说句题外话,对于网络运营,倘若你的网站流量高,那你的广告位就可以给你带来十分可...

巧用数据库归档技术解决性能下降问题

巧用数据库归档技术解决性能下降问题   许多数据库管理员都会遇到这样的困惑:伴随着业务的不断进行,数据库文件的大小也在逐渐的增大。由此给数据库管理工作带来很大的困难,一方面要为在线业务...

巧用Android网络通信技术,在网络上直接传输对象

Oracle函数的多种的分类 2010-04-01 09:11 佚名 博客园 字号:T | T 本文主要以相关函数的示例来介绍相关Oracle函数在实际操作中如何具体应用,以下是文章的具体介绍...

巧学巧用开关电源实用技术

  • 2009-11-14 08:42
  • 19.07MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)