0

你好。我是 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 中有多少个“/”。

谢谢。

4

3 回答 3

2

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

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

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

*first_slash = 0;

然后,您的域在url,其余的在first_slash

于 2013-10-06T05:06:20.887 回答
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
于 2013-10-06T05:07:51.303 回答
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/
于 2013-10-06T05:19:16.377 回答