Проблема с использованием strcmp - PullRequest
0 голосов
/ 09 июля 2011

вот код

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 и отображаю s, он печатается как "обычныйmsgstr "правильно, но когда я использую" s "в strcmp (s," normal ") == 0, это не работает.в чем проблема ????

Ответы [ 2 ]

1 голос
/ 09 июля 2011

Учитывая ваш ввод, параметр s для strcmp равен

"          regular"

, а не

"regular" 

Таким образом, нет совпадения, и, как результат, код вблок if никогда не запускается, и ваш цикл while никогда не прекратится.

0 голосов
/ 09 июля 2011

Вот функция (и полная программа, показывающая, как ее использовать), которая делает то, что я думаю, вы хотите. С учетом ввода «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 с Пустой аргумент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...