strtok

指定したデリミタを使用した文字列を一連のトークンに解析します。

string strtok(const char *string, const char *delimiter)

strtok関数は、指定したデリミタで区切られた文字列を使用して、文字列を一連のトークンに解析します。最初にstrtokをコールするときに、解析する文字列を指定します。その後の各コールでは、次のトークンを取得するためにNULLとして文字列を指定します。それぞれのコールには、異なるデリミタを指定できます。strtokが文字列の走査に使用する内部ポインタは、同じプローブを複数回使用可能にする場合にのみ有効です。strtok関数は、トークンがなくなるとNULLを返します。

例7-53 カンマ区切りの文字列をトークンに分割するためにstrtokを使用する方法。

この例では、strtokを使用して、カンマ区切りの文字列をトークンに分割します。DTraceにはwhileループのようなフロー制御構造が含まれていないため、述語を使用してこの機能をエミュレートし、各トークンをステップ処理する必要があります。この例は、文字列によって生成された最初の2つのトークンを調べる方法を示しています。各述語では、次のトークンを取得して、それが文字列の終わりを表すNULL値でないことを確認します。

BEGIN
 {
     this->str = "Carrots,Barley,Oatmeal,Corn,Beans";
 }
 
 BEGIN
 /(this->field = strtok(this->str, ",")) == NULL/
 {
         exit(1);
 }
 
 BEGIN
 {
         printf("First token: %s\n", this->field);
 }
 
 BEGIN
 /(this->field = strtok(NULL, ",")) == NULL/
 {
         exit(2);
 }
 
 BEGIN
 {
         printf("Second token: %s\n", this->field);
         exit(0)
 }