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
当我用 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