C++ C:strtok值返回null
我正在尝试解析HTTP请求头。我需要接第一行: GET/HTTP/1.1 但是,以下代码的输出为: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的后续
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-是的,我已经完成了第二部分。我将尝试多种分割选项,并让您知道我的进展