strtok может быть очень опасным. Он не является потокобезопасным. Его предполагаемое использование должно вызываться снова и снова в цикле, передавая результат с предыдущего вызова. Функция strtok имеет внутреннюю переменную, которая хранит состояние вызова strtok. Это состояние не уникально для каждого потока - оно глобально. Если какой-либо другой код использует strtok в другом потоке, у вас возникают проблемы.
Я бы рекомендовал искать реализацию регулярного выражения или использовать sscanf, чтобы разделить эту строку.
Попробуйте следующее:
char strprint[256];
char text[256];
strcpy(text, "My string to test");
while ( sscanf( text, "%s %s", strprint, text) > 0 ) {
printf("token: %s\n", strprint);
}
Примечание. Строка «текст» уничтожается по мере ее разделения. Это не может быть предпочтительным поведением =)