I'm trying to find different substrings of information from a larger string where the information is separated by ":"
For example: username:id:password:info
How could I using strstr
function in C loop this string to extract the information into different substring?
So far I've tried something like:
char string[] = "username:id:password:info"
char *endptr;
if((endptr = strstr(string, ":")) != NULL) {
char *result = malloc(endptr - string + 1);
if(result != NULL) {
memcpy(result, string, (endptr - string));
result[endptr - string] = '\0';
username = strdup(result);
free(result);
}
}
I want to make this loopable to extract all substrings.
find different substrings of information from a larger string where the information is separated by ":"
How could I usingstrstr
function in C loop this string to extract the information into different substring?
strstr()
isn't the best tool for this task, but it can be used to look for a ":"
.
Instead I'd recommend strcspn(string, "\n")
as the goal is to find the next ":"
or null character.
OP'c code is close to forming a loop, yet needs to also handle the last token, which lacks a final ':'
.
void parse_colon(const char *string) {
while (*string) { // loop until at the end
size_t len;
const char *endptr = strstr(string, ":"); // much like OP's code
if (endptr) {
len = (size_t) (endptr - string); // much like OP's code
endptr++;
} else {
len = strlen(string);
endptr = string + len;
}
char *result = malloc(len + 1);
if (result) {
memcpy(result, string, len);
result[len] = '\0';
puts(result);
free(result);
}
string = endptr;
}
}
int main(void) {
parse_colon("username:id:password:info");
}
Output
username
id
password
info