Fractionner la chaîne de caractères C en jetons à l’aide de sscanf

J’essaie de scinder une chaîne en jetons, mais de manière récursive. J’essaye d’parsingr:

"content=0&website=Google" 

afin que j’ai un moyen de prendre les parameters et les valeurs. Si j’essaie strtok je strtok par détruire la chaîne que je veux parsingr deux fois. Alors j’ai essayé

 char *contents = "content=0&website=Google" char arg[100]; char value[100]; sscanf(contents, "%s&%s", arg, value); 

lors d’une première passe, dans l’espoir d’parsingr à nouveau arg , mais il échoue et arg contient la chaîne entière. J’ai essayé d’utiliser "%s\&%s" pensant & était un mot réservé, mais pas de chance là-bas.

Aidez-moi!

Modifier:

C’était mon hack strtok:

 static void readParams(char * ssortingng, char * param, char * value) { printf("This is the ssortingng %s\n",ssortingng); char * splitted = strtok (ssortingng,"="); while (splitted != NULL) { printf("This is the ssortingng %s\n",splitted); splitted = strtok (NULL, "="); // Then do some saving to param and value } } char * splitted = strtok (contents,"&"); int counter = 0; while (splitted != NULL) { char * t_str = strdup(splitted); readParams(t_str, param, value); splitted = strtok (NULL, "&"); } 

mais ça ne marche pas parce que le strtok de strtok à la fin devient gobbldygook.

Voici une solution qui semble fonctionner:

 char *contents = "content=0&website=Google"; char arg[100] = {0}; char value[100] = {0}; sscanf(contents, "%[^&]&%s", arg, value); printf("%s\n%s\n", arg, value); 

scanf est plus primitif que vous ne le pensez – %s fera correspondre tout au prochain espace Votre meilleure solution est probablement de restr avec strtok mais de ne lui strdup que le contenu que vous avez strdup partir de l’original faisant autorité.

Je recommande quelque chose de similaire à ce qui suit:

 char t_str[100]; strncpy(t_str, contents, 100); //now strtok() on t_str, original contents will be preserved