(协议)://(主机名):(端口号) / (文件路径)/(文件名)
例如:http://zj.qq.com/a/20130824/002507.htm#p=8
http://www.itpub.net/kwrss/201211/wangzhiduankou.shtml
#include <stdio.h> //printf
#include <string.h> //strchr strncmp ,memcpy
#include <malloc.h> //malloc free
#include <stdlib.h> //atoi
//将source开始空间的以NULL结尾的字符拷贝到dest中
//返回的指针需要free
char*dup_str(const char*source)
if(source==NULL)
return NULL;
int len = strlen(source);
char *dest = (char*)malloc(len+1);
memcpy(dest,source,len+1);
return dest;
//函数功能:解析URL
//参数:host带回主机字符串,protocl协议,port端口,abs_path带回绝对路径
//使用完注意释放host和abs_path在堆上分配的内存
//备注:(1)先取到URL的一份拷贝,方面将该字符串截成几段,分别处理;
// (2)用了指针引用,也可以使用二重指针来解决参数带回值的问题
void parse_URL(const char*URL,const char*protocl,char*&host,unsigned int &port,char*&abs_path)
if(URL == NULL)
return ;
char *url_dup = dup_str(URL);
char *p_slash = NULL;//主机后第一个斜杠的位置
char *p_colon = NULL;//主机后第一个冒号的位置
char *start = 0; //记录www开始的位置
if(strncmp(url_dup,protocl,strlen(protocl))==0)
start = url_dup+strlen(protocl)+3;
p_slash = strchr(start,'/');
if(p_slash != NULL)
abs_path= dup_str(p_slash);
*p_slash = '\0';
abs_path= dup_str("/");
p_colon = strchr(start,':');
if(p_colon != NULL)
port = atoi(p_colon+1);
*p_colon = '\0';
port = 8080;//没有的话取默认的8080端口
host = dup_str(start);
if(url_dup != NULL)
free(url_dup);
url_dup = NULL;
int main()
//这是一个伪造的地址,用于测试
//char *URL = "http://www.xyz2013.com";
//char *URL = "ftp://www.xyz2013.com:8080";
char *URL = "https://www.xyz2013.com:1324/My/5201449.shtml";
char*abs_path = NULL;
char*host = NULL;
unsigned int port;
parse_URL(URL,"https",host,port,abs_path);
printf("主机地址:%s\n",host);
printf("端口号:%d\n",port);
printf("绝对路径:%s\n",abs_path);
//需要释放host,abs_path
if(host!=NULL)
free(host);
host = NULL;
if(abs_path!=NULL)
free(abs_path);
abs_path=NULL;
getchar();
这个可以应用于自己封装数据头的情况,比如基于socket来实现http协议等。URL的格式:(协议)://(主机名):(端口号) / (文件路径)/(文件名) 例如:http://zj.qq.com/a/20130824/002507.htm#p=8编译环境:windows ,visual studio2010以下是代码: #include //printf
# include < url>
int main () {
struct url_t *url = url_parse ( " http://example.com/path/to/file.html " );
printf ( " PROTOCOL: %s \n " , url-> protocol );
printf ( " HOST: %s \n " , url-> host );
printf ( " PORT: %s \n " , url-> port );
printf ( " PATH: %s \n " , url-> path );
url_free (url);
return 0 ;
PROTOCOL: http
HOST: example.com
协议解析url
http协议,rtp协议,rtmp协议,rtsp中解析url,很多语言都有封装的解析URL的工具类库,在c++ 写的server的中如果需要解析url,需要写一个高效率的解析封装方法。这里使用c++,仅仅使用c++ STL 的string 类 以及c++的封装特性,解析尽量使用了c的方式,以便于改进。
比较和查找
在url中查找字符串,如?,&,等等
static inline int judge_equeal(const char *pos, const char *comp
#include <iostream>
/* data: "http://www.gmail.com:443/path/test.cgi?name=value&name2=value2 */
static void __get_host_from_url(char *buf, size_t size, const char *url)
const char *ptr1, *ptr2;
size_t n;
buf[0] = 0;
原文:https://www.cnblogs.com/cang12138/p/5916578.html1、获取页面,HttpContext.Current.Request也是Request//获取当前页面url
string myurl = System.Web.HttpContext.Current.Request.Url.ToString();
//获取上一页面url
string Url...
CSDN上面的文章是真的垃圾,找个能用的访问URL的代码真的是难。大部分人都是相互抄抄抄,还抄不全,代码不可用,什么鬼博客。一点帮助都没有,浪费时间,浪费生命。
以下内容摘自StackOverFlow 链接
#ifndef HTTPUTIL_H
#define HTTPUTIL_H
#include <windows.h>
#include <string>
#inc...
Cuckoo Hashing是一种Hash表的实现方式,它的优点在于具有高效率、少冲突和快速查找的特点。C语言可以通过定义一个结构体来存储元素,并使用指针进行链接,然后使用哈希函数将元素映射到表中的桶中。下面是一个C语言实现Cuckoo Hashing的示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 10
struct Node {
int key;
int value;
struct HashTable {
struct Node *table[SIZE];
int hash1(int key) {
return key % SIZE;
int hash2(int key) {
return (key / SIZE) % SIZE;
void insert(struct HashTable *ht, int key, int value) {
int h1 = hash1(key);
int h2 = hash2(key);
struct Node *n = (struct Node*) malloc(sizeof(struct Node));
n->key = key;
n->value = value;
ht->table[h1] = n;
ht->table[h2] = n;
int main() {
struct HashTable ht;
memset(ht.table, 0, sizeof(ht.table));
insert(&ht, 1, 10);
insert(&ht, 2, 20);
insert(&ht, 3, 30);
printf("%d\n", ht.table[hash1(1)]->value);
printf("%d\n", ht.table[hash2(2)]->value);
printf("%d\n", ht.table[hash1(3)]->value);
return 0;
这仅仅是一个简单的示例,实际上,Cuckoo Hashing还需要实现许多其他功能,例如判断哈希冲突、进行重构等。但是,上面的代码可以作为C语言实现Cuckoo Hashing的一个基础。