6

我试图使用strtok();解析字符串 我正在尝试解析由分号 ( ; ) 分隔的字符串。但是当我输入一个不带分号的字符串 to 时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);
}

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

4

2 回答 2

9

不,分隔符意味着它是分隔标记的东西,所以如果没有分隔符,那么整个字符串被认为是第一个标记

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

a;b

那么你有标记 a 和 b

现在如果你b带走...

a

你还有令牌a

于 2012-11-29T20:00:21.897 回答
0

如果你仔细阅读手册页(http://man7.org/linux/man-pages/man3/strtok.3.html),你会看到它说:

strtok() 函数将字符串分成个或多个非空标记的序列。

所以,基本上它要么将你的输入字符串分解成多个标记(当它在给定的字符串中找不到给定的分隔符时就会发生这种情况)。

例子:

输入字符串 || 分隔符 || 代币

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

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

于 2019-10-25T19:41:29.090 回答