在打印输出时,printf如何知道strtok标记的结尾?

时间:2018-12-24 08:29:46

标签: c printf c-strings strtok

当我用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字符串的副本,只是返回给定c字符串第一个字符的内存地址。 -带有%s的printf将从内存地址中打印出字符,直到/ 0。

我的问题如下: printf如何知道在哪里停止用%s打印出令牌的字符?

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

1 个答案:

答案 0 :(得分:1)

我的回答很简单: “每个定界符都将替换为空字符。” 来源:IBM documentation