2016-06-15 12 views
0

Ich habe eine App erstellt, die HTTP-Header analysiert. Ich versuche zu finden, ob es eine bessere Möglichkeit gibt, HTTP-Pakete nach der POST-Methode zu filtern als die, die ich mir ausgedacht habe. Was ich versuche zu erreichen ist, die Tatsache auszunutzen, dass ich weiß, dass alle POST-Methoden-Paket-Strings mit "POST" beginnen. Gibt es eine Möglichkeit, nach dem ersten Wort einer Zeichenkette zu suchen, es zu speichern und dann eine Bedingung damit zu verwenden? Mein Code funktioniert, aber ich würde es vorziehen, nicht nach dem ganzen Paket nach einem "POST" zu suchen - man weiß nie, wann man zum Beispiel das Wort "POST" in einem GET-Paket erhält.Optimalere Möglichkeit, ein bestimmtes Wort in einem String-Puffer zu finden C

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* } 

Antwort

2

Da Sie nur für die Zeichenfolge „POST“ am Anfang des Pakets überprüfen möchten, können Sie die strncmp Funktion verwenden, zum Beispiel

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

Wie @jxh in den Kommentaren erwähnt, kann die strncpy Probleme verursachen, da sie die Zeichenfolge nicht null beendet wird, wenn der String-Länge als size_data weniger ist. Um sicherzustellen, dass die Zeichenfolge richtig terminiert ist, sollte der Code wie folgt aussehen:

+0

Das war genau das, wonach ich suchte. Danke vielmals. – EdTed

+0

Es gibt auch ein Problem, wenn 'size_data' kleiner als 4 ist. – jxh