我正在尝试解析HTTP请求标头。我需要拾取第一行:
GET / HTTP / 1.1
但是,以下代码的输出是:
Method: (null)
Filename: (null)
Version: (null)
Client hostname: (null)
为什么吗
代码:
char *token;
const char delimiter[2] = " ";
token = strtok(NULL, delimiter);
答案 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);