Strtok to separate all whitespace

Haskell picture Haskell · Nov 6, 2013 · Viewed 28.5k times · Source

I'm trying to split a string at spaces and tabs.

char * token = strtok(input, " \t");

works only for spaces. What am I doing wrong?

Answer

Mark Hendrickson picture Mark Hendrickson · Nov 6, 2013

Here is an example that illustrates that strtok() will work on tabs or spaces. The key is to pass in NULL on the all but the first call to strtok().

#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
    char buffer[1024];
    int rv = sprintf(buffer, "a string\ttokenize.");
    char *token = strtok(buffer, " \t");
    int i = 0;
    printf("cnt  token\n");
    printf("==========\n");
    while (token) {
        printf("%2d %s\n", i++, token);
        token = strtok(NULL, " \t");
    }
    return 0;
}

output from above program is as follows below.

cnt  token
==========
 0 a
 1 string
 2 tokenize.