0

こんにちは。私は C を初めて使用します。C の最初の「/」で URL を 2 つの部分に分割したいと考えています。

私はコードを持っています:

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 + 1URL の残りの部分です (文字列にない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 に答える