在字符串缓冲区中查找特定单词的更优方法 C
More optimal way to find a specific word in a string buffers C
我制作了一个解析 HTTP headers 的应用程序。我正在尝试寻找是否有比我想出的方法更好的方法来通过 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] = '[=11=]';
我制作了一个解析 HTTP headers 的应用程序。我正在尝试寻找是否有比我想出的方法更好的方法来通过 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] = '[=11=]';