我试图使用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
答案 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”