標準/拡張機能 | C/C++ | 依存項目 |
---|---|---|
z/OS UNIX System Services |
両方 | OS/390 V2R10 |
#include <wchar.h>
long long wcstoll(const wchar_t * __restrict__nptr,
wchar_t ** __restrict__endptr, int base);
その後で、サブジェクト・シーケンスの long 長整数への変換を試みてから、結果を戻します。
base の値がゼロの場合には、サブジェクト・シーケンスの 想定される形式は ISO/IEC 9899: 条項 6.1.3.2 に記述 されている整数定数の想定される形式で、オプションで前に正符号 (+) または負符号 (-) が付きますが、整数サフィックスは含まれません。base の値が 2 と 36 の間の場合には、サブジェクト・シーケンス の想定される形式は base 別に指定された基数を使用して整数を表示する ポータブル文字セットの一連の文字と数字のシーケンスで、オプションで前に正符号 (+) または負符号 (-) が付きますが、整数サフィックスは含まれません。a (または A) ~ z (または Z) までの文字は値 10 ~ 35 までの値と想定されます。想定された値が base の値より小さい文字だけが許可されます。base の値が 16 の場合には、文字 0x または 0X はオプションで 一連の文字および数字の前に付くことがありますが、符号があるとその後に続きます。
サブジェクト・シーケンスは、最初の非空白ワイド文字から始まる、入力ワイド文字ストリングの最長の初期サブシーケンスとして定義されて います。これが想定される形式です。入力ワイド文字ストリングが空であるか、すべて空白文字からなって いるか、あるいは最初の非空白ワイド文字が符号あるいは許可可能な 文字または数字以外である場合には、サブジェクト・シーケンスには ワイド文字は含まれません。
サブジェクト・シーケンスに想定される形式があって、base の値が ゼロの場合には、最初の数字から始まるワイド文字のシーケンスは ISO/IEC 9899: 条項 6.1.3.2 の規則に従って整数定数と解釈されます。サブジェクト・シーケンスに想定される形式があって、base の値が 2 と 36 の間に ある場合には、これは変換の基数として使用され、上に指定された値を各文字に想定します。サブジェクト・シーケンスが負符号 (-) で始まる場合には、変換から生じる値は無効になります。最終ワイド文字ストリングを指すポインターは、endptr が NULL ポインターでない場合に endptr が指すオブジェクトに保管されます。
C または POSIX ロケール以外のロケールでは、追加インプリメンテーション定義 のサブジェクト・シーケンス形式が受け入れられることがあります。
サブジェクト・シーケンスが空であるか、想定される形式になっていない場合には、変換は行われません。nptr の値は、endptr が NULL ポインターでない場合に endptr が指すオブジェクトに保管されます。このワイド文字関数の動作は、現行ロケールの LC_CTYPE カテゴリーの影響を受けます。 カテゴリーを変更すると、未定義の結果が発生する可能性があります。
0、{LLONG_MIN} および {LLONG_MAX} がエラーで戻されましたが、それらは正常実行時の有効な戻り値でもあるため、エラー状態を検査するアプリケーションは、errno を 0 に設定し、wcstoll() を呼び出してから、errno を検査する必要があります。
正常に実行された場合、wcstoll() は、変換された値があれば、それを戻します。
正常に実行されなかった場合、変換が実行できないと、wcstoll() は 0 を戻します。正しい値が表現可能な値の範囲外である場合、wcstoll() は値の符号に応じて LLONG_MAX (LONGLONG_MAX) または LLONG_MIN (LONGLONG_MIN) を戻します。基数の値がサポートされない場合、wcstoll() は 0 を戻します。
正常に実行されなかった場合、wcstoll() は errno を次のいずれかの 値に設定します。
/* Long Long example */
#define _LONG_LONG 1
#include <stdio.h>
#include <wchar.h>
int main(void)
{
wchar_t *wcs;
wchar_t *stopwcs;
long long l;
int base;
wcs = L"10110134932";
printf("wcs = `%ls`¥n", wcs);
for (base=2; base<=8; base*=2) {
l = wcstoll(wcs, &stopwcs, base);
printf(" wcstoll = %lld¥n", l);
printf(" Stopped scan at `%ls`¥n¥n", stopwcs);
}
}