在C中读取缓冲区的特定部分

时间:2013-12-20 13:56:05

标签: c linux string buffer

我有一个缓冲区,其中包含c:

中的以下文字
POST /home/alex/p2download HTTP/1.1
Host: localhost:1767
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:26.0) Gecko/20100101 Firefox/26.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://localhost:1767/home/alex/p2download
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 11

pattern=*.c

我想要的只是采取模式。在那个例子中只有“* .c” 我该怎么办?

2 个答案:

答案 0 :(得分:2)

你可以这样做:

char *pCh;
char *pattern = "pattern=";

pCh = strstr(buffer, pattern);
if(pCh)
    pCh += strlen(pattern);

假设缓冲区包含您提供的文字,pCh将指向'*'中的*.c

答案 1 :(得分:0)

您首先要在文字中找到代码字的位置,为此您可以使用const char * strstr ( const char * str1, const char * str2 );来返回str2str1第一次出现的地址

然后,您可以使用各种C * str函数在新变量中提取http POST内容的内容,

char* src = getYourHttpMessage();
char tag[] = "pattern=";

char* pattern_start = strstr(src, tag);

char* to_extract = NULL;
int to_extract_length = 0;

if(pattern_start != NULL) { // found the pattern
    for(to_extract = pattern_start + sizeof(tag); *to_extract != '\n'; to_extract++, to_extract_length++);
    to_extract = malloc(length_to_extract);
    strncpy(to_extract, pattern_start+sizeof(tag), to_extract_length);
}