標準/拡張機能 | C/C++ | 依存項目 |
---|---|---|
ISO C 改訂 |
両方 |
#include <wchar.h>
size_t wcsxfrm(wchar_t * __restrict__wcs1,
const wchar_t * __restrict__wcs2, size_t n);
wcs2 が指すワイド文字ストリングを文字照合重みを 表示する値に変形し、結果のワイド文字ストリングを wcs1 が指す配列に配置します。変換は、wcscmp() 関数が 2 つの変換されたワイド文字ストリングに 適用されると、同じ 2 つの元のワイド文字ストリングに適用された wcscoll() 関数の結果に対応して、ゼロより大きい値、等しい値、または小さい値を戻すというものです。終了 NULL ワイド文字コードを含む、n 個以下のエレメントだけが wcs1 によって指された結果の配列に配置されます。n がゼロの場合には、wcs1 は NULL ポインターになることが許可されます。オーバーラップした オブジェクト間でコピーが行われた場合には、動作は未定義です。
エラーを示すために予約された戻り値がないため、エラー状態を検査するアプリケーションは、errno を 0 に設定し、wcsxfrm() を呼び出してから、errno を検査する必要があります。
変形されたワイド文字ストリングの長さ (終了 NULL ワイド文字 コードは除く) を戻します。戻された値が n またはそれを超える場合には、wcs1 が指す配列の内容は保証されません。
wcs1 が NULL ポインターの場合には、wcsxfrm() は 変形されたワイド・ストリングを入れるのに必要なエレメント数を 戻します。
無効のワイド文字コードの変形した値は、特定のロケール定義の ために選択されたオプションによって、有効なワイド文字コードの 変形した値より小さいか、または大きくなります。この場合には、wcsxfrm() は (size_t)-1 を戻します。
wcsxfrm() は、LC_COLLATE カテゴリーによって制御されます。
EILSEQ エラーを設定して、wcs2 が指す ワイド文字ストリングに照合シーケンスの範囲を超えるワイド文字コードが 入っていることを示すことができます。
⁄* CELEBW28 *⁄
#include <stdio.h>
#include <wchar.h>
int main(void)
{
wchar_t *wcs;
wchar_t buffer[80];
int length;
printf("Type in a string of characters.¥n");
wcs = fgetws(buffer, 80, stdin);
length = wcsxfrm(NULL, wcs, 0);
printf("You would need a %d element array to hold the wide string", length);
printf("¥n¥n%ls¥n¥ntransformed according", wcs);
printf(" to this program's locale.¥n");
}