Strtok(),没有令牌匹配

时间:2012-11-29 19:52:17

标签: c string strtok

我试图使用strtok()解析字符串;我试图解析由分号(;)分隔的字符串。但是当我输入一个没有分号的字符串到strtok()时,它返回整个字符串。如果没有令牌匹配,它不应该返回NULL吗?

这是我的代码:

int main(int argc, char** argv) 
{
    char cmd[] = "INSERT A->B B->C INSERT C->D";
    char delim[] = ";";
    char *result = NULL;

    result = strtok(cmd,delim);

    if(result == NULL)
    {
        printf("\n NO TOKENS\n");
    }
    else
    {

        printf("\nWe got something !! %s ",result);

    }

    return (EXIT_SUCCESS);
}

输出结果是:我们得到了一些东西! INSERT A-> B B-> C INSERT C-> D

2 个答案:

答案 0 :(得分:9)

不,分隔符表示它是分隔标记的东西,所以如果没有分隔符,则整个字符串被认为是第一个标记

考虑你是否有两个令牌,然后取走其中一个令牌。 如果你有

a;b

然后你有令牌a和b

现在如果你带走b ......

a

你还有令牌a

答案 1 :(得分:0)

如果您仔细阅读了手册页(http://man7.org/linux/man-pages/man3/strtok.3.html),将会看到其中的内容:

  

strtok()函数将字符串分为或   更多非空令牌。

因此,基本上,它要么将您的输入字符串分成多个标记,要么不将其断开(并且在给定的字符串中没有找到给定的分隔符时会发生这种情况。)

示例:

input_string ||分隔符||令牌

“ abc:def” || “:” || “ abc”和“ def”

“ abcdef” || “:” || “ abcdef”