Вот функция (и полная программа, показывающая, как ее использовать), которая делает то, что я думаю, вы хотите. С учетом ввода «i / p: регулярно: ddf» он печатает:
Найден токен: "i / p"
Найден токен: «обычный»
Регулярное!
Найден токен: "ddf"
#include <stdio.h>
#include <string.h>
void process(char * input)
{
char * s = strtok(input, ": "); // Get first token. Colon AND space are delimiters.
while(1)
{
if (s == NULL)
{
break; // No more tokens.
}
printf("Token found: \"%s\"\n", s);
if(strcmp(s,"regular")==0)
{
printf("Found \"regular\" token.\n");
}
s = strtok(NULL, ": "); // Get next token.
}
}
int main(int argc, char **argv)
{
char str[] = "i/p: regular:ddf";
process(str); // Warning: process(str) will modify str
}
Однако есть один большой недостаток этого подхода, если вы не можете вызвать strtok
где-либо еще в цикле, потому что эта функция зависит от внутреннего состояния, которое сохраняется strtok
, когда она вызывает strtok
с Пустой аргумент.