使用strtok将URL分成2个部分

时间:2013-10-06 05:00:42

标签: c

您好。我是C的新手。我想将一个URL分成两部分,分成C中的第一个“/”。

我有代码:

char *token1, *token2;
token1 = strtok("website URL here", "/");
token2 = strtok(NULL, "/");

问题是,如果网站是这样的:“www.foo.com/foo/”就可以了。我得到了“www.foo.com”和“foo”

但如果URL有多个“/”,例如“www.foo.com/foo1/foo2/foo3/”。我如何获得“www.foo.com”和“foo1 / foo2 / foo3 /”?我不想制作更多的令牌,因为我不知道URL中会有多少“/”。

感谢。

3 个答案:

答案 0 :(得分:2)

您可以使用strchr查找/的第一个索引:

/* char *url; */
char *first_slash = strchr(url, '/');

然后,first_slash + 1是网址的其余部分(如果NULL不在字符串中,则为/)。如果你想处理2个C字符串,那么只需设置为0:

*first_slash = 0;

然后,您的域名为url,其余域名位于first_slash

答案 1 :(得分:1)

strchr更适合这项任务:

示例:

const char* url = "www.google.com/one/two";

char *path = strchr(url, '/');

char *domain = calloc(path - url + 1, sizeof(char));
strncpy(domain, url, path - url);

printf("domain: %s\npath  : %s\n", domain, path + 1);

free(domain);

<强>输出:

domain: www.google.com
path  : one/two

答案 2 :(得分:1)

如果不使用strtok修改源字符串,则无法获得下一次出现的符号。 strtok也是危险函数,它不是线程安全的。

为什么不使用strchr?:

char url[] = "www.foo.com/foo1/foo2/foo3/";

char *host = url;
char *path = strchr(url, '/');
if (path != NULL) {
  *path++ = '\0';
  printf("host: %s; path: %s\n", host, path);
} else {
  printf("host: %s\n", host);
}

结果:

host: www.foo.com; path: foo1/foo2/foo3/