- 论坛徽章:
- 0
|
打印出这行提示是这一句程序:
if(ret) {if(DEBUG) fprintf(stdout, "GetHost error from '%s'\n", argv); exit(0);}
而程序里用的是argv,理论上应该是http://bn.sina.com.cn/pv/index.html啊
我写了测试代码:
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- char e[2] = "@/";
- void GetMemory(char ** myanchor, int len)
- {
- if(!(*myanchor)) (*myanchor) = (char *)malloc(len + 1);
- else (*myanchor) = (char *)realloc((void *)(*myanchor), len + 1);
- memset((*myanchor), 0, len + 1);
- }
- void Rstrchr(char * s, int x, char ** d)
- {
- int len = strlen(s) - 1;
- while(len >= 0) {
- if(x == s[len]) {(*d) = s + len; return;}
- len--;
- }
- (*d) = 0;
- }
- int GetHost(char * src, char ** web, char ** file, int * port, char ** dir) {
- char * pA, * pB, * pC;
- int len;
- *port = 0;
- if(!(*src)) return -1;
- pA = src;
- if(!strncmp(pA, "http://", strlen("http://"))) pA = src+strlen("http://");
- /* else if(!strncmp(pA, "https://", strlen("https://"))) pA = src+strlen("https://"); */
- else return 1;
- pB = strchr(pA, '/');
- if(pB) {
- len = strlen(pA) - strlen(pB);
- GetMemory(web, len);
- memcpy((*web), pA, len);
- if(*(pB+1)) {
- Rstrchr(pB + 1, '/', &pC);
- if(pC) len = strlen(pB + 1) - strlen(pC);
- else len = 0;
- if(len > 0) {
- GetMemory(dir, len);
- memcpy((*dir), pB + 1, len);
- if(pC + 1) {
- len = strlen(pC + 1);
- GetMemory(file, len);
- memcpy((*file), pC + 1, len);
- }
- else {
- len = 1;
- GetMemory(file, len);
- memcpy((*file), e, len);
- }
- }
- else {
- len = 1;
- GetMemory(dir, len);
- memcpy((*dir), e + 1, len);
- len = strlen(pB + 1);
- GetMemory(file, len);
- memcpy((*file), pB + 1, len);
- }
- }
- else {
- len = 1;
- GetMemory(dir, len);
- memcpy((*dir), e + 1, len);
- len = 1;
- GetMemory(file, len);
- memcpy((*file), e, len);
- }
- }
- else {
- len = strlen(pA);
- GetMemory(web, len);
- memcpy((*web), pA, strlen(pA));
- len = 1;
- GetMemory(dir, len);
- memcpy((*dir), e + 1, len);
- len = 1;
- GetMemory(file, len);
- memcpy((*file), e, len);
- }
- pA = strchr((*web), ':');
- if(pA) *port = atoi(pA + 1);
- else *port = 80;
- return 0;
- }
- int main(int argc, char ** argv)
- {
- int ret = 0, WebPort = 0;
- char * WebHost = 0, * PageAddress = 0, * WebDir = 0;
- ret = GetHost(argv[1], &WebHost, &PageAddress, &WebPort, &WebDir); /* Get web page info */
- if(ret) {fprintf(stdout, "GetHost error from '%s'\n", argv[1]); exit(0);}
- else fprintf(stdout, "'%s' => %s:%d %s %s\n", argv[1], WebHost, WebPort, WebDir, PageAddress);
- return 0;
- }
复制代码
运行结果为:
test@locale:/source/example/c$ gcc gethost.c -Wall
test@locale:/source/example/c$ ./a.out http://bn.sina.com.cn/pv/index.html
'http://bn.sina.com.cn/pv/index.html' => bn.sina.com.cn:80 pv index.html
GNM,你在你电脑上试试这段代码看行不行 |
|