0

私は次のC文字列を持っています:

char teste[] = "POST /index.html HTTP/1.1\nHost: localhost:8000\nConnection: keep-alive\nContent-Length: 23\nCache-Control: max-age=0\nAccept: text/html,application/xhtml+x
ml,application/xml;q=0.9,*/*;q=0.8\n Origin: http://localhost:8000\nUser-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.65 Safari/
537.36\nContent-Type: application/x-www-form-urlencoded\nReferer: http://localhost:8000/index.html\nAccept-Encoding: gzip,deflate,sdch\nAccept-Language: pt-BR,pt;q=0.8,en-US;q=
0.6,en;q=0.4\n\nnome=thiago&idade=12313";

そして、「\n\n」の後に発生する POST パラメーターを抽出する必要があります。

\n\nnome=チアゴ&idade=12313";

strtokは最初の'\n' でスタックするように見えるので、これを行うためのより良い方法があると思います。これまでの私のコード:

char *token = malloc(100);
char **value  = malloc(100 * sizeof(char *));
char **key  = malloc(100 * sizeof(char *));
int i;

for(i = 0; i < 100; i++)
{
   value[i] = malloc(100);
   key[i] = malloc(100);
}

/* This doesn't work */ 
token = strtok(teste, "\n\n");

これを解決する方法についてのアイデアはありますか? ありがとう!

4

1 に答える 1

1

strstr()パラメータの先頭を見つけるために使用できます。

char *params = strstr(teste, "\n\n");
if (params != NULL) {
    params += 2; // now points to first key
    // ...
}

次に、 を使用strtok()してキーと値のペアを区切りますparams

備考: strtok_r()は の再入可能バージョンでありstrtok()、(少なくとも OS X 上では) strtok()によって廃止されましたstrsep()

于 2013-09-04T20:44:18.653 に答える