>> C言語関数一覧トップに戻る
今回はC言語のstrtok関数について説明します。
strtok関数は文字列を区切り文字で区切ってトークンに分解することが出来ます。
■書式
#include <string.h>
char *strtok(char *s1, const char *s2);
第一引数には分解する文字配列
第二引数には区切り文字
をそれぞれ指定します。
戻り値は、区切り文字で区切られたトークンのポインタを返します。
区切り文字が見つからなければNULLを返します。
文字列の中に区切り文字が複数ある場合は、2回目以降は第一引数をNULLにして実行すると、
戻り値がNULLになるまで、トークンのポインタが返ってきます。
■サンプルコード
12
345
678
9
上記の実行結果のように区切り文字で分解されていることがわかります。
strtok関数の仕組みは第一引数で指定した文字配列の区切り文字を見つかるたびに\0で埋めていっています。
なので、それぞれのトークンのポインタを表示しても\0までの文字列しか表示されないので、
分解して表示することが出来るというわけです。
逆に言うと、第一引数の文字配列の値を書き換えてることになるので、
値を書き換えてはいけない文字列リテラルを第一引数に指定してはいけません。
また、値を書き換えたくない配列も指定しないようにしましょう。
(配列をコピーしてコピーしたほうを使うとかね)
>> 【C言語 isalnum 使い方】に進む
>> C言語関数一覧トップに戻る
C言語 strtok 使い方
strtok関数は文字列を区切り文字で区切ってトークンに分解することが出来ます。
■書式
#include <string.h>
char *strtok(char *s1, const char *s2);
第一引数には分解する文字配列
第二引数には区切り文字
をそれぞれ指定します。
戻り値は、区切り文字で区切られたトークンのポインタを返します。
区切り文字が見つからなければNULLを返します。
文字列の中に区切り文字が複数ある場合は、2回目以降は第一引数をNULLにして実行すると、
戻り値がNULLになるまで、トークンのポインタが返ってきます。
■サンプルコード
#include <string.h> #include <stdio.h> int main(void) { char test[50] = "12.345.678.9"; char *p; p = strtok(test,"."); //1つ目のトークン表示 puts(p); //トークンがNULLになるまでループ while(p!=NULL){ //2回目以降は第一引数はNULL p = strtok(NULL,"."); if(p!=NULL){ puts(p); } } return 0; }■実行結果
12
345
678
9
上記の実行結果のように区切り文字で分解されていることがわかります。
strtok関数の仕組みは第一引数で指定した文字配列の区切り文字を見つかるたびに\0で埋めていっています。
なので、それぞれのトークンのポインタを表示しても\0までの文字列しか表示されないので、
分解して表示することが出来るというわけです。
逆に言うと、第一引数の文字配列の値を書き換えてることになるので、
値を書き換えてはいけない文字列リテラルを第一引数に指定してはいけません。
また、値を書き換えたくない配列も指定しないようにしましょう。
(配列をコピーしてコピーしたほうを使うとかね)
>> 【C言語 isalnum 使い方】に進む
>> C言語関数一覧トップに戻る