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 –