这是代码
void process(char *input)
{
char *s;
char s1[100];
s=strtok(input,":");
while(1)
{
if(strcmp(s,"regular")==0)// the strcmp is not working
{
s=strtok(NULL,",");
if(s==NULL)
break;
}
}
实际上,函数进程的输入是
i/p: regular:ddf
但是当我使用strtok func和display s提取令牌时 它正确地打印为“常规”,但是当我在strcmp中使用“s”时(s,“常规”)== 0 它不起作用。有什么问题????
答案 0 :(得分:1)
根据您的输入,s
的{{1}}参数为
strcmp
不
" regular"
因此,没有匹配,因此,"regular"
块中的代码永远不会运行,并且您的if
循环将永远不会终止。
答案 1 :(得分:0)
这是一个功能(以及一个显示如何使用它的完整程序),它可以实现我想要的功能。鉴于“i / p:regular:ddf”的输入,它打印出来:
Token发现:“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
时存储的内部状态带有NULL参数的{1}}。