I have a function using strtok like this
void f1(char *name)
{
...
char *tmp;
tmp = strtok(names, " ,");
while(tmp)
{
...
tmp = strtok(NULL, " ,");
}
...
}
And i have a call f1(“abc,def”);
Problem is that in first call f1 gets abc,def
and in 2nd call gets just abc
I am confused.. Why is this so?
strtok()modifies its input string by overwriting the delimiters with a 0; so, assuming your code looks something like this:after the first call to f1, the ‘,’ character is overwritten with a 0, which is a string terminator, so the second call only sees “abc” as the string.
Note that because
strtok()modifies its input, you do not want to pass it a string literal as an argument; attempting to modify the contents of a string literal invokes undefined behavior.The safe thing to do is to create a local string within f1 and copy the contents of names to it, then pass that local string to
strtok(). The following should work with C99: