c - 在字符串缓冲区中查找特定单词的更优方法 C

标签 c http http-request

我制作了一个解析 HTTP header 的应用程序。我正在尝试寻找是否有比我想出的方法更好的通过 POST 方法过滤 HTTP 数据包的方法。我想要完成的是利用我知道所有 POST 方法数据包字符串都以“POST”开头的事实。有没有办法搜索字符串的第一个单词,存储它然后使用条件?我的代码有效,但我不想在整个数据包中搜索“POST”——例如,你永远不知道什么时候在 GET 数据包中出现“POST”一词。

   char re[size_data];
   strncpy(re,data,size_data);   //data is the buffer and size_data the buffer size
   char * check;
   check = strstr(re,"POST"); 
   if(check!= NULL)
  { *something happens* }

最佳答案

因为你只想检查数据包开头的字符串“POST”,你可以使用strncmp函数,例如

if ( strncmp( re, "POST ", 5 ) == 0 )
{
    // this is a POST packet
}

正如@jxh 在评论中指出的那样,strncpy 可能会导致问题,因为它不会空终止字符串,除非字符串长度小于size_data。为确保字符串正确终止,代码应如下所示

char re[size_data+1];
strncpy(re,data,size_data);
re[size_data] = '\0';

关于c - 在字符串缓冲区中查找特定单词的更优方法 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37846698/

相关文章:

c++ - 是否有一个 GNU C 编译器选项可以生成运行速度比默认设置更快但精度更低的浮点程序?

c - 在Linux 2.4中,最小的 child 列表是循环的吗?

java - 是什么让 Java 比 C 更容易解析?

c - 不同数据类型中的指针行为

java - 对 Java POST 调用的 HTTP 错误请求响应

Python 请求模块和 JSON 响应

http - 阻止对 AWS Elastic Beanstalk 和 Elastic Load Balancer 的 HEAD 请求

java - 如何使用 httpPost 将数据发送到网站,应用程序崩溃

regex - Go中的http Get请求(获取几行)

apache - HTTP 请求和 Apache 模块 : Creative attack vectors