关于strtok()函数的谜团

时间:2016-03-13 19:41:04

标签: c strtok

很抱歉可能是一个愚蠢的问题,但在阅读了大量的例子后,我仍然不明白strtok()的工作原理。

以下是示例:

char s[] = "   1 2 3"; // 3 spaces before 1
int count = 0;
char* token = strtok(s, " ");
while (token != NULL) {
   count++;
   token = strtok(NULL, " ");
}

执行count等于3.为什么? 请解释一下,我已经详细介绍了该函数调用中发生的事情。

2 个答案:

答案 0 :(得分:1)

由于:

http://man7.org/linux/man-pages/man3/strtok.3.html

From the above description, it follows that a sequence of two or more
contiguous delimiter bytes in the parsed string is considered to be a
single delimiter, and that delimiter bytes at the start or end of the
string are ignored.

您也可以打印连续的令牌。 输出给我:     1     2     3

答案 1 :(得分:0)

它是C,但C ++参考有一个很好的例子:http://www.cplusplus.com/reference/cstring/strtok/

char s[]初始化后,指向包含数据的内存位置:1 2 3

首先调用strtok,使用单个空格分隔符,使指针前进指向进一步的内存循环,现在只需:1 2 3。进一步调用会增加指针,指向连续令牌的位置。

注意:将strtok()视为一个tokenizer函数,由有效标记向前迭代。此外,打印出pch的当前值可能有助于更好地理解它(或使用调试器)。