printf 在打印出来时如何知道 strtok 的标记结束?

How does printf know the end of the tokens of strtok while printing them out?

当我用 strtok 标记一个 c 字符串并用 %s 通过 printf 打印出标记时,我只是想弄清楚后台发生了什么。

这就是例子:

char str[] = "Where - is - the - end - of - tokens?";
const char s[2] = "-";
char *token;

/* get the first token */
token = strtok(str, s);

/* walk through other tokens */
while( token != NULL ) {
    printf( " %s\n", token );
    token = strtok(NULL, s);
}

return(0);

我的信念: - strtok 不创建给定 c 字符串的副本,只是 return 给定 c 字符串第一个字符的内存地址。 - 带 %s 的 printf 将打印出内存地址到 /0 的字符。

我的问题如下: printf 如何知道在哪里停止打印带有 %s 的标记字符?

请帮助我理解 printf 与 %s 的这种行为。

我的答案很简单: "Each delimiter is replaced by a null character." 资料来源:IBM documentation