2016-03-17 45 views
-4

這是的strtok函數的例子...我需要一個解釋用於該塊:的strtok函數c解釋

while (pch != NULL) 
{ 
    printf ("%s\n",pch); 
    pch = strtok (NULL, " "); 
} 
return 0; 

尤其pch = strtok (NULL, " ");

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    char str[] ="This a sample string"; 
    char * pch; 
    printf ("Splitting string \"%s\" into tokens:\n",str); 
    pch = strtok (str," "); 
    while (pch != NULL) 
    { 
     printf ("%s\n",pch); 
     pch = strtok (NULL, " "); 
    } 
    return 0; 
} 
+6

你看過[函數文檔](http://en.cppreference.com/w/c/string/byte/strtok)嗎? –

+1

這是[strtok的在線手冊頁](http://linux.die.net/man/3/strtok)。閱讀完後你有什麼特別的問題嗎? –

+0

我知道這個函數從字符串中獲取標記,但是在這一行[strtok(NULL,「」); ]我不知道我將得到它的令牌的字符串在哪裏! –

回答

1

的strtok()是從一個函數標準C庫。標準C庫有一些開源實現。例如:下面的鏈接是來自Microsoft的一個版本。

http://research.microsoft.com/en-us/um/redmond/projects/invisible/src/crt/strtok.c.htm

你可以在代碼中清楚地看到:

/* Skip leading delimiters if new string. */ 
if (s1 == NULL) { 
    s1 = lastToken; 
    if (s1 == NULL)   /* End of story? */ 
    return NULL; 
} else 
..... 

變量 「lastToken」 被用於跟蹤strtok的狀態()。

這就是第二個標記應該將NULL傳遞給strtok()的原因。