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