C:strtok值返回null

时间:2014-03-06 19:43:13

标签: c++ c cstring strtok

我正在尝试解析HTTP请求标头。我需要拾取第一行:

GET / HTTP / 1.1

但是,以下代码的输出是:

Method: (null)
Filename: (null)
Version: (null)
Client hostname: (null)

为什么吗

代码:

    char *token;
    const char delimiter[2] = " ";
    token = strtok(NULL, delimiter);

2 个答案:

答案 0 :(得分:4)

第一次调用strtok时,需要提供要拆分为第一个参数的字符串。对strtok的后续调用需要使用NULL作为获取后续分隔字符串的第一个参数。

祝你好运。

答案 1 :(得分:2)

分隔符必须是“\ r \ n”,否则某些部分将被连接

    // Parse the request                                                                                  
    char *token;
    const char delimiter[6] = " \r\n";

    token = strtok(buffer, delimiter);
    method = token;
    printf("Method: %s\n", method);

    token = strtok(NULL, delimiter);
    filename = token;
    printf("Filename: %s\n", filename);

    token = strtok(NULL, delimiter);
    version = token;
    printf("Version: %s\n", version);

    while (token != NULL) {
      if (strstr(token, "Host:") != NULL) {
        token = strtok(NULL, delimiter);
        client_hostname = token;
        break;
      }
      token = strtok(NULL, delimiter);
    }

    printf("Client hostname: %s\n", client_hostname);