Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C:strtok值返回null_C++_C_Cstring_Strtok - Fatal编程技术网

C++ C:strtok值返回null

C++ C:strtok值返回null,c++,c,cstring,strtok,C++,C,Cstring,Strtok,我正在尝试解析HTTP请求头。我需要接第一行: GET/HTTP/1.1 但是,以下代码的输出为: Method: (null) Filename: (null) Version: (null) Client hostname: (null) 为什么? 代码: 第一次调用strtok时,需要提供要拆分的字符串作为第一个参数。对strtok的后续调用需要使用NULL作为第一个参数来获取后续的分隔字符串 祝你好运。第一次调用strtok时,需要提供要拆分的字符串作为第一个参数。对strtok的后续

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

GET/HTTP/1.1

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

Method: (null)
Filename: (null)
Version: (null)
Client hostname: (null)
为什么?

代码:


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


祝你好运。

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


祝您好运。

必须使用分隔符,\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);

分隔符必须是\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);

您在对strtok的第一次调用中传递NULL。请求的缓冲区在哪里?您应该在第一次调用中将其传递给strtok。您必须首先使用非NULL参数调用strtok,但您应该传递正在解析的行缓冲区。在第一次调用之后,您需要使用NULL参数调用它,以便它继续它停止的地方。伟大的头脑都是这样想的。您在对strtok的第一次调用中传递NULL。请求的缓冲区在哪里?您应该在第一次调用中将其传递给strtok。您必须首先使用非NULL参数调用strtok,但您应该传递正在解析的行缓冲区。在第一次调用之后,您需要使用NULL参数调用它,这样它就可以继续到它停止的地方。伟大的头脑都是这样想的。哦,谢谢-我的错误。好的,现在只有主机名是空的-为什么?好的,我用分隔符分割请求。但是,第一行和第二行用\r\n-分隔,并且它们不会被拆分。我可以指定多个分割选项吗?@chuckfinley是的,这就是你需要做的。给它\n。请注意,当您输入if strmptoken,Host:==0时,您需要执行另一个strtok来获取实际的主机名。@Filipe-是的,我已经完成了第二部分。我将尝试多种分割选项,并让您知道我是如何得到onOh的,谢谢-我的错误。好的,现在只有主机名是空的-为什么?好的,我用分隔符分割请求。但是,第一行和第二行用\r\n-分隔,并且它们不会被拆分。我可以指定多个分割选项吗?@chuckfinley是的,这就是你需要做的。给它\n。请注意,当您输入if strmptoken,Host:==0时,您需要执行另一个strtok来获取实际的主机名。@Filipe-是的,我已经完成了第二部分。我将尝试多种分割选项,并让您知道我的进展