I’m writing a short function to parse through a file by checking string tokens. It should stop when it hits “visgroups”, which is the 9th line of the file I am using to test (which is in the buffer called *source). “versioninfo” is the first line. When I run this code it just repeatedly prints out “versioninfo” until I cancel the program manually. Why isn’t the strtok function moving on?
I will be doing some different manipulation of the source when I reach this point, that’s why the loop control variable is called “active”. Would this have anything to do with the fact that strtok isn’t thread-safe? I’m not using source in any other threads.
int countVisgroups(int *visgroups, char *source) {
const char delims[] = {'\t', '\n', ' '};
int active = 0;
char *temp;
while (!active){
temp = strtok(source, delims);
if (temp == NULL) {
printf("%s\n", "Reached end of file while parsing.");
return(0);
}
if (strncmp(temp, "visgroups", 9) == 0) {
active = 1;
return(0);
}
printf("%s\n", temp);
}
return(0);
}
After the first call to
strtokwith the string you want to tokenize, all subsequent calls must be done with the first parameter set to NULL.And no it probably doesn’t have to do anything with thread safety.
Try to rewrite it like this: