2015-11-18 191 views
-4

我有一个包含多个HTTP头的字符。 现在我要拆分的标题和每个标题存储到一个char []数组,像将字符串拆分为几个子字符串C

myheader[0] = "POST /index001.html HTTP/1.1\r\nHost:xxx ..."; 
myheader[1] = "POST /index002.html HTTP/1.1\r\nHost:xxx ..." 

每个头部的尺寸是不同的,所以我不能指望字节。我不知道该怎么做。 strstr()只能找到第一个子字符串。

缓冲区格式是这样的:

POST /index001.html HTTP/1.1 
Host: xxx 
... 
POST /index002.html HTTP/1.1 
Host: xxx 
... 
POST /index003.html HTTP/1.1 
Host: xxx 
... 

谁能帮助我的代码PLZ?

编辑:

我写了一个函数,从缓冲区中提取一个子串。但它只能处理第一对“POST”。 例如,

GetInBetween(“1234www567890rrr777wwwOUEJF99rrr”,“www”,“rrr”)只能获得“567890”。

char * GetInBetween(char* buffer, char* start, char* end) 
{ 
    char * subbuffer = NULL; 
    subbuffer = strstr(buffer, startpoint); 

    int betweenLen = 0; 
    if (subbuffer == NULL) 
    { 
     return NULL; 
    } 
    betweenLen = strcspn(subbuffer, endpoint); 

    int sbLen=0; 
    sbLen= strlen(subbuffer); 
    int spLen =0; 
    spLen = strlen(startpoint); 

    int dataLen =0; 
    dataLen = betweenLen - spLen; 

    char databuffer[1024]; 
    for (int i =0; i< dataLen; i++) 
    { 
     databuffer[0+i] = subbuffer[4+i]; 
    } 
    databuffer[dataLen] ='\0'; 
    int test = strlen(databuffer); 

    return databuffer; 
} 
+4

你试了一下,为什么它没有工作? – moffeltje

+0

让问题更清楚 – Sunny

+0

我曾经写过一个分割函数'GetInBetween(char * buffer,char * start,char * end)'。我用'strstr()''strcspn()'。但是这个函数只能处理第一对“POST”。我不知道如何处理第三和第四等。 –

回答

1

你可以改变你的函数有早期的呼叫的一些记忆,就像strtok一样。然后,您可以在同一缓冲区中重复调用您的函数,以查找任何后续事件。作为这种方法的草图(完成自己):

char * GetInBetween(char* buffer, char* startstr, char* endstr) 
{ 
    static char *lastbuf, *lastbufp, *laststartstr, *lastendstr; 
    char * subbuffer = NULL; 
    if (startstr==NULL || endstr==NULL) { 
     if (lastbuf!=buffer) return NULL; // not same buffer: error; 
     if (lastbufp==NULL) return NULL;  // no previous match, so no next match 
     subbuffer= strstr(lastbufp, laststartstr); 
    } 
    else 
    { 
     laststartstr= startstr;  // remember the parts to search in between 
     lastendstr= endstr; 
     lastbuf= buffer; 
     subbuffer = strstr(buffer, startpoint); 
     lastbufp= NULL;    // no match yet to remember 
    } 
相关问题