strcmp使用问题

时间:2011-07-09 18:23:34

标签: c

这是代码

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 它不起作用。有什么问题????

2 个答案:

答案 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}}。