gpt4 book ai didi

c - 当我使用 strtok_r(buff, "\r\n", &saveptr); 时,从浏览器请求中提取内容的过程是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 08:31:05 25 4
gpt4 key购买 nike

假设我已在线读取浏览器请求并将其保存到 buff。我想从这个 buff 中提取一些信息,比如方法、url、versoin。所以想用strtok_r来拆分。

假设请求是“GET http://******** HTTP/1.1”。 ********* 是网站链接。我设置了某个 token ,并使用以下代码:

cmd = strtok_r(buf1, token, &saveptr);
strcpy(url, strtok_r(NULL, token, &saveptr));
version = strtok_r(NULL, token, &saveptr);

首先,如果我将 token 设置为“”。然后,我将得到 cmd="GET", url = "http://********"。但是,VERSION后面没有“”。所以这可能会导致问题。

其次,如果我将 token 设置为“\r\n”。然后,我会得到 cmd="GET http://******** HTTP/1.1",这是错误的。

所以正确的做法可能是将token设置为“\r\n”。但我不确定这个过程。谁能解释为什么这有效???

最佳答案

这里有两件事要提。

  1. 您可以将一组多个定界符传递给 strtok()/strtok_r()。在解析标记时,它将考虑分隔符数组中的每个 元素。来自man page [强调我的]

The delim argument specifies a set of bytes that delimit the tokens in the parsed string.

A sequence of two or more contiguous delimiter bytes in the parsed string is considered to be a single delimiter.

  1. strcpy(url, strtok_r(NULL, token, &saveptr)); 这是一种非常危险的代码编写方式。如果 strtok() 失败并返回 NULL,请考虑恐怖。这样做的最佳方法是在另一个变量中收集 strtok() 的返回值,并在 NULL 检查后,将该变量用于 strcpy()

关于c - 当我使用 strtok_r(buff, "\r\n", &saveptr); 时,从浏览器请求中提取内容的过程是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28336521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com