您好。我是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中会有多少“/”。
感谢。
答案 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/