【发布时间】:2016-01-11 14:15:46
【问题描述】:
我正在使用 C 语言编写一个程序,该程序需要我获取请求行并将其分解为后续部分。这是出于学习目的,所以我可以期待一个相当标准的请求行。
考虑到这个问题,我打算用某种for() 循环遍历请求行中的每个字符,每次遇到SP 时都会创建一个新字符串,但我想知道是否有一种使用strchr() 指向请求行的每个“片段”的方法?
由于请求行看起来像 method SP request-target SP HTTP-version CRLF ,其中 SP 是一个空格,有什么方法可以创建一个使用 strchr(request-line, ' ') 来创建 string 的函数(或 char* 或 @987654330 @) 然后在下一个 SP 结束?
编辑:
所以我可以做类似的事情
char method = strchr(request-line, ' ');
但是,“方法”不是SP 之后的每个字符吗?如何“修剪”放入变量中的内容?还是我完全误解了这个功能是如何工作的?
【问题讨论】:
-
你认为 strtok() 在这里有用吗?
-
我以前没听说过,但看起来很有趣。我正在谷歌上寻找更多的使用示例,而不仅仅是手册页,但是你有什么好的例子吗?
-
@komali_2 Refer here
-
strtok()基本上接受一个字符串并将其切碎(一次一个标记)并为您提供指向每个标记的指针。在内部,它将0放在找到分隔符的位置,并记住指针越过分隔符,并将指针传递给令牌的开头。顺便说一句,它不是线程安全的。 -
strtok的问题在于它会修改您传递的缓冲区。只需strchr,您就可以轻松找到每个字符串的开头和结尾,这就是您创建所需的空终止字符串所需的全部内容。