Utilisation de strtok_r () pour extraire plusieurs chaînes d’un tableau

J’essaie d’parsingr et de stocker simultanément des données en utilisant strtok_r () à partir d’un tableau de caractères qui est passé dans ma fonction. L’extraction de la première variable fonctionne comme prévu, lorsque j’arrive à la seconde, je ne reçois qu’une partie partielle entre le jeton et le terminateur NULL de la chaîne. J’essaie ici d’obtenir la valeur après ‘to =’, le mot de passe après ‘paw =’ et le nombre après ‘tz =’. Le premier et le dernier travail, mais je perds des jetons de part et d’autre de ‘patte’ et ne semble pas pouvoir extraire le texte de l’autre côté du ‘=’. Je suis laissé avec NULL à chaque fois.

Est-ce le meilleur moyen d’parsingr une chaîne comme celle-ci? J’ai une version de travail utilisant strtok (), mais elle utilise tellement de variables que je dois stocker une temp à chaque fois, puis lancer des jetons sur chacune d’entre elles. un cas. J’ai aussi essayé d’utiliser strchr () mais c’était aussi très encombrant et nécessitait beaucoup de variables temporaires.

Merci pour tout conseil et j’attends avec impatience la discussion!

Voici mon code ci-dessous, il comstack (nécessite ssortingng.h)

int main(int argc, char **argv){ char resp[] = "INCOMING,1,443:GET /send?to=12&paw=password&tz=3 HTTP/1.1"; char *arg; char *p_arg; char *temp; char *p_temp; printf("resp is: %s\n",resp); //full response arg = strtok_r(resp, ",", &p_arg); arg = strtok_r(NULL, ",", &p_arg); printf("first num = %s\n", arg); //get the first number strtok_r(NULL,"/", &p_arg); //discard the rest up until '/' arg = strtok_r(NULL,"?", &p_arg); printf("arg is now: %s\n", arg); //we got the first operator "test" if(strncmp(arg, "send", 4) == 0){ while(arg){ if(strncmp(arg,"to",2) == 0){ printf("in to, arg is %s\n", arg); temp = strtok_r(arg,"to", &p_temp); temp = strtok_r(temp,"=", &p_temp); //get the number after 'to=' printf("to is %s\n", temp); } else if(strncmp(arg,"paw",3) == 0){ printf("In paw, arg is %s\n",arg); //got the paw token //now get the password after the '=' temp = strtok_r(arg,"paw", &p_temp); temp = strtok_r(temp,"=", &p_temp); printf("paw is %s\n", temp); } else if(strncmp(arg,"tz",2) == 0){ printf("In tz, arg is %s\n",arg); //got the tz token temp = strtok_r(arg,"tz=", &p_temp); temp = strtok_r(temp," ", &p_temp); //extract tz value printf("tz is %s\n", temp); } arg = strtok_r(NULL,"&", &p_arg); } //while } //if "test" } //main