函式
<cstring>

strtok

char * strtok ( char * str, const char * delimiters );
將字串分割成標記
一系列對該函式的呼叫將 str 分割成標記,這些標記是由 delimiters 中的任何字元分隔的連續字元序列。

第一次呼叫時,該函式期望 str 引數是一個 C 字串,其第一個字元被用作掃描標記的起始位置。在後續呼叫中,該函式期望一個空指標,並使用前一個標記結束後的位置作為新的掃描起始位置。

為了確定標記的開始和結束,該函式首先從起始位置掃描第一個 **不** 包含在 delimiters 中的字元(這成為 標記的開始)。然後從這個 標記的開始 開始掃描第一個包含在 delimiters 中的字元,這成為 標記的結束。當找到終止的 空字元 時,掃描也會停止。

這個 標記的結束 被自動替換為 **空字元**,而 標記的開始 由函式返回。

一旦在呼叫 strtok 時找到 str 的終止空字元,所有後續的(以空指標作為第一個引數的)呼叫都將返回一個空指標。

上一個標記找到的位置由函式內部保留,以便在下次呼叫時使用(特定的庫實現不必避免資料爭用)。

引數

str
要截斷的 C 字串。
請注意,此字串將被修改,分割成更小的字串(標記)。
或者,可以指定一個空指標,在這種情況下,函式將繼續掃描先前成功呼叫函式後結束的位置。
delimiters
包含分隔符字元的 C 字串。
這些字元可以從一次呼叫到下一次呼叫而不同。

返回值

如果找到標記,則返回指向標記開頭的指標。
否則,返回 空指標
當在正在掃描的字串中達到字串的末尾(即遇到空字元)時,總是返回 空指標

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/* strtok example */
#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;
}

輸出

Splitting string "- This, a sample string." into tokens:
This
a
sample
string


另見