wcstok, wcstok_s
|
ヘッダーで定義
<wchar.h>
|
||
| (1) | ||
|
wchar_t
*
wcstok
(
wchar_t
*
str,
const
wchar_t
*
delim,
wchar_t
**
ptr
)
;
|
(C95以降)
(C99まで) |
|
|
wchar_t
*
wcstok
(
wchar_t
*
restrict
str,
const
wchar_t
*
restrict
delim,
wchar_t ** restrict ptr ) ; |
(C99以降) | |
|
wchar_t
*
wcstok_s
(
wchar_t
*
restrict
str, rsize_t
*
restrict
strmax,
const wchar_t * restrict delim, wchar_t ** restrict ptr ) ; |
(2) | (C11以降) |
-
-
str
!
=
NULL
の場合、この特定のワイド文字列に対する
wcstokの最初の呼び出しとして扱われます。関数は delim に含まれ ない 最初のワイド文字を検索します。
-
- そのようなワイド文字が見つからなかった場合、 str にはトークンが全く存在せず、関数はヌルポインタを返します。
- そのようなワイド文字が見つかった場合、それは トークンの開始位置 となります。関数はその位置から、 delim に含まれる最初のワイド文字を検索します。
-
-
そのようなワイド文字が見つからなかった場合、
str
にはトークンが1つしか存在せず、将来の
wcstokの呼び出しはヌルポインタを返します。 - そのようなワイド文字が見つかった場合、それはヌルワイド文字 L ' \0 ' に 置換 され、パーサーの状態(通常は次のワイド文字へのポインタ)はユーザー提供の場所 * ptr に保存されます。
-
そのようなワイド文字が見つからなかった場合、
str
にはトークンが1つしか存在せず、将来の
- その後、関数はトークンの開始位置へのポインタを返します。
-
str
==
NULL
の場合、
wcstokの後続の呼び出しとして扱われます:関数は前回の呼び出しで中断した位置から同じ * ptr を使用して継続します。この動作は、最後に検出されたトークンの次のワイド文字へのポインタが str として渡された場合と同じです。
-
str
!
=
NULL
の場合、この特定のワイド文字列に対する
-
- strmax 、 delim または ptr がnullポインタである場合
- 非初期呼び出し(nullの str を使用)で、 * ptr がnullポインタである場合
- 最初の呼び出しで、 * strmax がゼロまたは RSIZE_MAX / sizeof ( wchar_t ) より大きい場合
- トークンの終端の検索が、ソース文字列の終端(初期値 * strmax で計測)に達し、null終端文字が見つからない場合
-
すべての境界チェック付き関数と同様に、
wcstok_sは、実装によって __STDC_LIB_EXT1__ が定義され、かつユーザーが <wchar.h> を含める前に __STDC_WANT_LIB_EXT1__ を整数定数 1 に定義した場合にのみ利用可能であることが保証される。
目次 |
パラメータ
| str | - | トークン化するNULL終端ワイド文字列へのポインタ |
| delim | - | 区切り文字を指定するNULL終端ワイド文字列へのポインタ |
| ptr | - |
wchar_t
*
型のオブジェクトへのポインタ。
wcstok
と
wcstok_s
の両方でパーサーの内部状態を保存するために使用される
|
| strmax | - | 初期状態で str のサイズを保持するオブジェクトへのポインタ:wcstok_sは未処理の残り文字数を保存する |
戻り値
次のトークンの先頭へのポインタを返します。トークンがこれ以上存在しない場合はヌルポインタを返します。
注記
この関数は破壊的です:文字列
str
の要素に
L
'
\0
'
文字を書き込みます。特に、ワイド文字列リテラルは
wcstok
の第一引数として使用できません。
strtok
とは異なり、
wcstok
は静的ストレージを更新しません:パーサーの状態をユーザー提供の場所に保存します。
他のほとんどのトークナイザとは異なり、
wcstok
の区切り文字は、後続の各トークンごとに異なる場合があり、前のトークンの内容に依存することさえあります。
Windows CRTにおける wcstok_s の実装はC標準に準拠しておらず、 wcstok の単なるエイリアスでしかありません。
例
#include <stdio.h> #include <wchar.h> int main(void) { wchar_t input[] = L"A bird came down the walk"; printf("Parsing the input string '%ls'\n", input); wchar_t* buffer; wchar_t* token = wcstok(input, L" ", &buffer); while (token) { printf("%ls\n", token); token = wcstok(NULL, L" ", &buffer); } printf("Contents of the input string now: '"); for (size_t n = 0; n < sizeof input / sizeof *input; ++n) input[n] ? printf("%lc", input[n]) : printf("\\0"); puts("'"); }
出力:
Parsing the input string 'A bird came down the walk' A bird came down the walk Contents of the input string now: 'A\0bird\0came\0down\0the\0walk\0'
参考文献
- C11規格 (ISO/IEC 9899:2011):
-
- 7.29.4.5.7 wcstok関数 (p: 437-438)
-
- K.3.9.2.3.1 wcstok_s関数 (p: 645-646)
- C99規格 (ISO/IEC 9899:1999):
-
- 7.24.4.5.7 wcstok関数 (p: 383-384)
関連項目
|
(C11)
|
バイト文字列内の次のトークンを検索する
(関数) |
|
C++ documentation
for
wcstok
|
|