...
Code Block | ||
---|---|---|
| ||
char *token; char *path = getenv("PATH"); char *token; token = strtok(path, ":"); puts(token); while (token = strtok(0, ":")) { puts(token); } printf("PATH: %s\n", path); /* PATH is now just "/usr/bin" */ |
...
In this solution the string being tokenized is copied into a temporary buffer which is not referenced after the calls to strtok()
:
Code Block | ||
---|---|---|
| ||
char *token; char *path = getenv("PATH"); /* PATH is something like "/usr/bin:/bin:/usr/sbin:/sbin" */ char *copy = malloc(strlen(path) + 1); if (copy == NULL) { /* handle error */ } strcpy(copy, path); char *token; token = strtok(copy, ":"); puts(token); while (token = strtok(0, ":")) { puts(token); } printf("PATH: %s\n", path); /* PATH is still "/usr/bin:/bin:/usr/sbin:/sbin" */ |
...