wcrtomb
マルチバイト文字列表現にはワイド文字に変換します。この関数のセキュリティが強化されたバージョンについては、「wcrtomb_s」を参照してください。
size_t wcrtomb(
char *mbchar,
wchar_t wchar,
mbstate_t *mbstate
);
template <size_t size>
size_t wcrtomb(
char (&mbchar)[size],
wchar_t wchar,
mbstate_t *mbstate
); // C++ only
パラメーター
[出力] mbchar
結果の文字列に変換する文字。[入力] wchar
変換するワイド文字。[入力] mbstate
mbstate_t オブジェクトへのポインター。
戻り値
変換エラーが発生した場合よりマルチバイト文字を表すために必要なバイト数を返します。
解説
wcrtomb の関数は mbchar によって表されるアドレスに wchar に格納されている値からmbstate に含まれる指定した変換状態で始まるワイド文字を変換します。戻り値は対応するマルチバイト文字を表すために必要なバイト数ですが MB_CUR_MAX のサイズよりも返されません。
mbstate が null の場合mbstate_t の内部を含むオブジェクトは mbchar 変換状態使用されます。文字のシーケンス wchar に対応するマルチバイト文字表現が見つからなかった場合はを返しerrno は EILSEQ に設定されます。
wcrtomb の関数は restartability によって wctomb、_wctomb_l とは異なります。変換は同じ状態またはそのほかの restartable 関数への後続の呼び出しの mbstate に格納されます。結果は restartable と nonrestartable 関数の使用を使用すると未定義です。たとえばアプリケーションが wcsnlen ではなく wcsrtombs への後続の呼び出しは wcstombs の代わりに使用するとwcsrlen を使用します。
C++ ではこの関数によって新しい関数を呼び出しますテンプレート オーバーロードがありさらに安全この関数の対応があります。詳細については、「セキュリティ保護されたテンプレート オーバーロード」を参照してください。
例外
wcrtomb の関数はこの関数が実行されている間で mbstate が null のとき現在のスレッドの関数が setlocale を呼び出さない限りマルチスレッド セーフです。
使用例
// crt_wcrtomb.c
// compile with: /W3
// This program converts a wide character
// to its corresponding multibyte character.
#include <string.h>
#include <stdio.h>
#include <wchar.h>
int main( void )
{
size_t sizeOfCovertion = 0;
mbstate_t mbstate;
char mbStr = 0;
wchar_t* wcStr = L"Q";
// Reset to initial conversion state
memset(&mbstate, 0, sizeof(mbstate));
sizeOfCovertion = wcrtomb(&mbStr, *wcStr, &mbstate); // C4996
// Note: wcrtomb is deprecated; consider using wcrtomb_s instead
if (sizeOfCovertion > 0)
{
printf("The corresponding wide character \"");
wprintf(L"%s\"", wcStr);
printf(" was converted to the \"%c\" ", mbStr);
printf("multibyte character.\n");
}
else
{
printf("No corresponding multibyte character "
"was found.\n");
}
}
同等の .NET Framework 関数
該当なし標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。
必要条件
ルーチン |
必須ヘッダー |
---|---|
wcrtomb |
<wchar.h> |