strtok
strtok
通过用0覆盖分隔符来修改输入数组;并不是第一个标记之后的所有东西都被删除或清除,只是在第一个标记之后有一个字符串终结符,因此在打印之后没有任何东西。
例如:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main(void)
{
char str[] = "This is a test";
printf("before strtok: ");
for (size_t i = 0; i < sizeof str; i++)
{
if (isprint(str[i]))
putchar(str[i]);
else
putchar('.');
}
putchar ('\n');
char *token = strtok(str, " ");
while (token)
{
printf("token = %8s, str = ", token);
for (size_t i = 0; i < sizeof str; i++)
{
if (isprint(str[i]))
putchar(str[i]);
else
putchar('.');
}
putchar('\n');
token = strtok(NULL, " ");
}
printf("after all strtok: ");
for (size_t i = 0; i < sizeof str; i++)
{
if (isprint(str[i]))
putchar(str[i]);
else
putchar('.');
}
putchar('\n');
return 0;
}
这里的输出(.
在这种情况下,代表0):
before strtok: This is a test.
token = This, str = This.is a test.
token = is, str = This.is.a test.
token = a, str = This.is.a.test.
token = test, str = This.is.a.test.
after all strtok: This.is.a.test.
的strtok
电话后,所有其他标记仍然存在,但由于我们用0覆盖空格,所有常规文本处理例程(strcpy
,strcat
,printf
,puts
等)只能看到第一个标记。
如果要保留原始字符串的内容,则必须将它们复制到另一个缓冲区并在该缓冲区上执行strtok
调用。
您是否阅读过有关'strtok(*)* * * *的文档? – EOF
'strtok()'通过用空字节覆盖分隔符来工作,以便每个标记都变成一个单独的字符串。如果您需要原始字符串,请在使用'strtok()'之前复制它。 – Barmar
no no ....例如temp-> author是“bon jovi”....在第一次迭代时next_token获得“bon”,但第二次删除了temp-> author之外的所有内容,除了“bon”并且不能转到next token –