Split string C into tokens using sscanf

I am trying to split a string into tokens, but somewhat recursively. I am trying to parse:

"content=0&website=Google" 

so that I have a way to output the parameters and values. If I try strtok , I will eventually destroy the string that I want to parse twice. So I tried

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

as a first pass, hoping to parse arg again, but it fails, and arg contains the entire string. I tried using the "%s\&%s" thinking & was a reserved word, but no luck there.

Help!

Edit:

This was my strtok hack:

 static void readParams(char * string, char * param, char * value) { printf("This is the string %s\n",string); char * splitted = strtok (string,"="); while (splitted != NULL) { printf("This is the string %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, "&"); } 

but it does not work, because the broken strtok at the end becomes gobbldygook.

+4
source share
3 answers

Here is a solution that works:

 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); 
+8
source

scanf more primitive than you seem to think - %s will match everything until the next space. A better solution should probably be related to strtok , but discard only the content that you have strdup ed from the authoritative original.

+1
source

I recommend something similar to the following:

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

Source: https://habr.com/ru/post/1399929/


All Articles