標準/拡張機能 | C/C++ | 依存項目 |
---|---|---|
ISO C 改訂 |
両方 |
#include <wchar.h>
wchar_t *wcstok(wchar_t * __restrict__wcs1,
const wchar_t * __restrict__wcs2, wchar_t ** __restrict__ptr);
#define _XOPEN_SOURCE
#include <wchar.h>
wchar_t *wcstok(wchar_t *wcs1, const wchar_t *wcs2);
#define _XOPEN_SOURCE
#define _MSE_PROTOS
#include <wchar.h>
wchar_t *wcstok(wchar_t *wcs1,
const wchar_t *wcs2, wchar_t **ptr);
wcstok() 関数に対する一連の呼び出しは wcs1 が指す ワイド・ストリングを一連のトークンに分割し、そのおのおのは wcs2 が指すワイド・ストリングから ワイド文字によって区切られます。3 番目の引数は、wcstok() 関数が同じストリングの走査を継続する のに必要な情報を保管する呼び出し元提供のワイド文字ポインターを 指します。
シーケンスの最初の呼び出し、wcs1 は ワイド文字ストリングを指しますが、同じワイド・ストリングの 以降の呼び出しでは、wcs1 は NULL ポインターに なります。wcs1 が NULL ポインターの場合には、ptr が指す値は同じワイド文字ストリングに対する直前の呼び出し によって設定された値に一致します。そうでない場合には、その値は無視されます。wcs2 が指す区切りワイド文字ストリングは、呼び出しによって異なることがあります。
シーケンスの最初の呼び出しは、wcs2 が指す現行の区切りワイド文字ストリングに含まれていない、最初のワイド文字として、wcs1 が指すワイド文字ストリングを検索します。そのようなワイド文字が見つからなかった場合には、wcs1 が指すワイド文字ストリングにトークンがなく、wcstok() は NULL ポインターを戻します。そのようなワイド文字が見つかった場合には、それは最初の トークンの初めです。
その後、wcstok() は、そこから現行の区切りワイド・ストリングに含まれているワイド文字を検索します。そのようなワイド文字が見つからなかった場合には、現行のトークン は wcs1 が指すワイド文字ストリングの終わりまで拡張し、それ以降にトークンを検索すると NULL ポインターが戻されます。そのようなワイド文字が見つかった場合には、それは現行のトークンを 終了する、NULL 文字によって上書きされます。
いずれの場合であっても、wcstok() 関数はポインター ptr に 十分な情報を保管するので、以降の呼び出しは NULL ポインターを 最初の引数の値とし、未変更のポインター値を 3 番目の引数として、前に戻されたトークン (あれば) の終了のすぐ後で検索を 開始します。
このワイド文字関数の動作は、現行ロケールの LC_CTYPE カテゴリーの影響を受けます。 カテゴリーを変更すると、未定義の結果が発生する可能性があります。
XPG4 の特殊な動作: プログラム・ソース・ファイル内の wchar ヘッダーをインクルードするステートメントより前に、XPG4 の動作を指定してフィーチャー・テスト・マクロを定義した場合、_MSE_PROTOS フィーチャー・テスト・マクロも定義しない限り、コンパイラーは、ユーザーのプログラムが wcstok() 関数の XPG4 版を使用するものと想定します。 XPG4 と他のフィーチャー・テスト・マクロのリストについては、表 1 を参照してください。
wchar_t *wcstok(wchar_t *wcs1, const wchar_t *wcs2);
XPG4 の wcstok() 関数には、プログラムのストレージに、再始動情報のアドレスを指定するための 3 番目のパラメーターが脱落しています。代わりに、C/370™ がランタイム・ライブラリーのストレージ比較可能再始動情報を提供します。このライブラリーのストレージは、スレッド化アプリケーションに対して XPG4 wcstok() 関数をスレッド特有なものにする、スレッド単位に基づいて提供されることに注意してください。
正常に実行された場合、wcstok() は、トークンの最初のワイド文字へのポインターを戻します。
トークンがない場合、wcstok() は NULL ポインターを戻します。
⁄* CELEBW22 *⁄
#include <wchar.h>
int main(void)
{
static wchar_t str1[] = L"?a??b,,,#c";
static wchar_t str2[] = L"¥t ¥t";
wchar_t *t, *ptr1, *ptr2;
t = wcstok(str1, L"?", &ptr1); ⁄* t points to the token L"a" *⁄
t = wcstok(NULL, L",", &ptr1); ⁄* t points to the token L"??b" *⁄
t = wcstok(str2, L" ¥t,", &ptr2); ⁄* t is a null pointer *⁄
t = wcstok(NULL, L"#,", &ptr1); ⁄* t points to the token L"c" *⁄
t = wcstok(NULL, L"?", &ptr1); ⁄* t is a null pointer *⁄
}