在C中使用strtok将URL分成两部分
你好。我是C语言的新手。我想用C语言中的第一个“/”将URL分成两部分 我有密码:在C中使用strtok将URL分成两部分,c,C,你好。我是C语言的新手。我想用C语言中的第一个“/”将URL分成两部分 我有密码: 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/”。如何获取“ww
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中会有多少“/”
谢谢。您可以使用
strchr
查找/
的第一个索引:
/* char *url; */
char *first_slash = strchr(url, '/');
然后,first\u斜杠+1
是url的其余部分(如果/
不在字符串中,则为NULL
)。如果要处理2个C字符串,只需设置为0:
*first_slash = 0;
然后,您的域是
url
,其余域位于第一斜杠中您可以使用strchr
查找/
的第一个索引:
/* char *url; */
char *first_slash = strchr(url, '/');
然后,first\u斜杠+1
是url的其余部分(如果/
不在字符串中,则为NULL
)。如果要处理2个C字符串,只需设置为0:
*first_slash = 0;
然后,您的域是url
,其余域位于第一斜杠中更适合此任务:
示例:
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
输出:
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
更适合此任务:
示例:
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
输出:
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
如果不使用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/
如果不使用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/
所有的答案都很有帮助。但我只能接受一个。我选择了最快的。所有的答案都很有帮助。但我只能接受一个。我选择了最快的。