在C中使用strtok将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

你好。我是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/”。如何获取“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/

所有的答案都很有帮助。但我只能接受一个。我选择了最快的。所有的答案都很有帮助。但我只能接受一个。我选择了最快的。