前へ | 次へ | 目次 | 索引 |
ワイド文字をそのマルチバイト文字表現に変換します。
#include <wchar.h>size_t wcrtomb (char *s, wchar_t wc, mbstate_t *ps);
s
結果として得られるマルチバイト文字へのポインタ。wc
ワイド文字。ps
mbstate_tオブジェクトへのポインタ。 NULL ポインタが指定された場合,関数は内部の mbstate_tオブジェクトを使用します。 mbstate_tは,状態依存のコードセットの変換状態を保持することを目的とする不透明のデータ型です。
s が NULL ポインタである場合, wcrtomb関数は次の呼び出しと等価です。
wcrtomb (buf, L'\0', ps)
buf は内部バッファです。
s が NULL ポインタでない場合, wcrtomb関数は, wc が指定するワイド文字 (シフト・シーケンスを含む) に対応するマルチバイト文字を表現するために必要なバイト数を決定し,結果として得られたバイトを,第 1 要素が s によってポイントされている配列に格納します。格納されるのは最高 MB_CUR_MAXバイトです。
wc が null ワイド文字である場合には,初期シフト状態を復元するために必要なシフト・シーケンスの後に null バイトが格納されます。結果として記述される状態は,初期変換状態です。
n マルチバイト文字を表現するためのシフト・シーケンスを含む,結果の配列に格納されたバイト数。 - 1 エンコーディング・エラーを示します。 wc 引数は有効なワイド文字ではありません。グローバルな errno は EILSEQ に設定されます。変換状態は未定義です。
2 つのワイド文字列を連結します。
#include <wchar.h>関数バリアント wcscat関数は,それぞれ 32 ビットと 64 ビットのポインタ・サイズで使用するための _wcscat32と _wcscat64という名前のバリアントを持っています。ポインタ・サイズ固有の関数の使用方法については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.10 節を参照してください。wchar_t *wcscat (wchar_t *wstr_1, const wchar_t *wstr_2);
wstr_1, wstr_2
null で終了するワイド文字列へのポインタ。
wcscat関数は,終端の null 文字を含むワイド文字列 wstr_2 を, wstr_1 の末尾に追加します。wcsncatも参照してください。
x 連結された結果を保持できるだけの大きさを持つと仮定される第 1 引数 wstr_1。
#include <stdlib.h> #include <stdio.h> #include <wchar.h> #include <string.h> /* This program concatenates two wide-character strings using */ /* the wcscat function, and then manually compares the result */ /* to the expected result */ #define S1LENGTH 10 #define S2LENGTH 8 main() { int i; wchar_t s1buf[S1LENGTH + S2LENGTH]; wchar_t s2buf[S2LENGTH]; wchar_t test1[S1LENGTH + S2LENGTH]; /* Initialize the three wide-character strings */ if (mbstowcs(s1buf, "abcmnexyz", S1LENGTH) == (size_t)-1) { perror("mbstowcs"); exit(EXIT_FAILURE); } if (mbstowcs(s2buf, " orthis", S2LENGTH) == (size_t)-1) { perror("mbstowcs"); exit(EXIT_FAILURE); } if (mbstowcs(test1, "abcmnexyz orthis", S1LENGTH + S2LENGTH) == (size_t)-1) { perror("mbstowcs"); exit(EXIT_FAILURE); } /* Concatenate s1buf with s2buf, placing the result into */ /* s1buf. Then compare s1buf with the expected result */ /* in test1. */ wcscat(s1buf, s2buf); for (i = 0; i < S1LENGTH + S2LENGTH - 2; i++) { /* Check that each character is correct */ if (test1[i] != s1buf[i]) { printf("Error in wcscat\n"); exit(EXIT_FAILURE); } } printf("Concatenated string: <%S>\n", s1buf); }
この例のプログラムを実行すると,次の結果が生成されます。
Concatenated string: <abcmnexyz orthis>
指定されたワイド文字列の中でワイド文字をスキャンします。
#include <wchar.h>関数バリアント wcschr関数は,それぞれ 32 ビットと 64 ビットのポインタ・サイズで使用するための _wcschr32と _wcschr64という名前のバリアントを持っています。ポインタ・サイズ固有の関数の使用方法については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.10 節を参照してください。wchar_t *wcschr (const wchar_t *wstr, wchar_t wc);
wstr
null で終了するワイド文字列へのポインタ。wc
wchar_t型の文字。
wcschr関数は,null で終了するワイド文字列の中の,指定されたワイド文字の最初のオカレンスのアドレスを返します。終端の null 文字は文字列の一部と見なされます。wcsrchrも参照してください。
x 指定されたワイド文字の最初のオカレンスのアドレス。 NULL ワイド文字が文字列中に存在しないことを示します。
#include <stdlib.h> #include <stdio.h> #include <wchar.h> #include <string.h> #define BUFF_SIZE 50 main() { int i; wchar_t s1buf[BUFF_SIZE]; wchar_t *status; /* Initialize the buffer */ if (mbstowcs(s1buf, "abcdefghijkl lkjihgfedcba", BUFF_SIZE) == (size_t)-1) { perror("mbstowcs"); exit(EXIT_FAILURE); } /* This program checks the wcschr function by incrementally */ /* going through a string that ascends to the middle and */ /* then descends towards the end. */ for (i = 0; (s1buf[i] != '\0') && (s1buf[i] != ' '); i++) { status = wcschr(s1buf, s1buf[i]); /* Check for pointer to leftmost character - test 1. */ if (status != &s1buf[i]) { printf("Error in wcschr\n"); exit(EXIT_FAILURE); } } printf("Program completed successfully\n"); }
この例のプログラムを実行すると,次の結果が生成されます。
Program completed successfully
2 つのワイド文字列を比較します。文字列が異なるかどうか,どのように異なるかを示す整数を返します。
#include <wchar.h>int wcscmp (const wchar_t *wstr_1, const wchar_t *wstr_2);
wstr_1, wstr_2
null で終了するワイド文字列へのポインタ。
wcscmp関数は,wstr_1 の中のワイド文字を wstr_2 の中のワイド文字と比較します。文字列が異なる場合,関数は次の値を返します。
- wstr_1 の中の最初の異なる文字のコード・ポイントが, wstr_2 の中の対応する文字のコード・ポイントよりも小さい場合には, 0 よりも小さい整数。
- wstr_1 の中の最初の異なる文字のコード・ポイントが, wstr_2 の中の対応する文字のコード・ポイントよりも大きい場合には, 0 よりも大きい整数。
ワイド文字列が等しい場合,関数は 0 を返します。
wcscoll関数とは異なり, wcscmp関数は個々のワイド文字の 2 進値に基づいて文字列を比較します。
wcsncmpも参照してください。
< 0 wstr_1 が wstr_2 よりも小さいことを示します。 = 0 wstr_1 が wstr_2 と等しいことを示します。 > 0 wstr_1 が wstr_2 よりも大きいことを示します。
2 つのワイド文字列を比較し,文字列が異なるかどうか,どのように異なるかを示す整数を返します。この関数は,カレント・ロケールの LC_COLLATE カテゴリの照合情報を使用して,比較の方法を決定します。
#include <wchar.h>int wcscoll (const wchar_t *ws1, const wchar_t *ws2);
ws1, ws2
ワイド文字列へのポインタ。
wcscoll関数は, wcscmp関数とは異なり, 2 つの文字列をロケールに依存する形で比較します。エラー条件のための値は予約されていないので,アプリケーションは関数呼び出しの前に errnoを 0 に設定し,呼び出しの後にこれをテストすることで,エラーをチェックしなくてはなりません。wcsxfrmも参照してください。
< 0 ws1 が ws2 よりも小さいことを示します。 0 文字列が等しいことを示します。 > 0 ws1 が ws2 よりも大きいことを示します。
ワイド文字列 source を,終端の null 文字も含めて dest にコピーします。
#include <wchar.h>関数バリアント wcscpy関数は,それぞれ 32 ビットと 64 ビットのポインタ・サイズで使用するための _wcscpy32と _wcscpy64という名前のバリアントを持っています。ポインタ・サイズ固有の関数の使用方法については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.10 節を参照してください。wchar_t *wcscpy (wchar_t *dest, const wchar_t *source);
dest
null で終了するワイド文字デスティネーション文字列へのポインタ。source
null で終了するワイド文字ソース文字列へのポインタ。
wcscpy関数は source を dest にコピーし, source の null 文字をコピーした後に停止します。コピーが 2 つのオーバラップする文字列の間で行われた場合の動作は未定義です。wcsncpyも参照してください。
x source のアドレス。
ワイド文字列の中の文字を,ワイド文字のセットと比較します。関数は,ワイド文字のセットに含まれていない文字だけからなる先頭の部分文字列の長さを返します。
#include <wchar.h>size_t wcscspn (const wchar_t *wstr1, const wchar_t *wstr2);
wstr1
null で終了するワイド文字列へのポインタ。これが null 文字列だった場合には 0 が返されます。wstr2
関数が探すワイド文字のセットを含んでいる, null で終了するワイド文字列へのポインタ。
wcscspn関数は, wstr1 がポイントする文字列の中のワイド文字を, wstr2 に含まれている文字を検出するまでスキャンします。関数は,wstr2 に含まれていない文字のみから構成される, wstr1 の先頭のセグメントの長さを返します。
x セグメントの長さ。
#include <stdlib.h> #include <stdio.h> #include <wchar.h> #include <string.h> /* This test sets up 2 strings, buffer and w_string, and */ /* then uses wcscspn() to calculate the maximum segment */ /* of w_string, which consists entirely of characters */ /* NOT from buffer. */ #define BUFF_SIZE 20 #define STRING_SIZE 50 main() { wchar_t buffer[BUFF_SIZE]; wchar_t w_string[STRING_SIZE]; size_t result; /* Initialize the buffer */ if (mbstowcs(buffer, "abcdefg", BUFF_SIZE) == (size_t)-1) { perror("mbstowcs"); exit(EXIT_FAILURE); } /* Initialize the string */ if (mbstowcs(w_string, "jklmabcjklabcdehjklmno", STRING_SIZE) == (size_t)-1) { perror("mbstowcs"); exit(EXIT_FAILURE); } /* Using wcscspn - work out the largest string in w_string */ /* which consists entirely of characters NOT from buffer */ result = wcscspn(w_string, buffer); printf("Longest segment NOT found in w_string is: %d", result); }
この例のプログラムを実行すると,次の結果が生成されます。
Longest segment NOT found in w_string is: 4 |
tm構造体に格納されている日付および時刻情報を使用して,ワイド文字出力文字列を作成します。出力文字列の形式は書式文字列によって制御されます。
#include <wchar.h>関数バリアント _DECC_V4_SOURCE および _VMS_V6_SOURCE 機能テスト・マクロを定義してコンパイルすると, OpenVMS バージョン 7.0 より前の動作と等価な, wcsftime関数へのローカル時刻ベースのエントリ・ポイントが使用可能となります。size_t wcsftime (wchar_t *wcs, size_t maxsize, const char *format, const struct tm *timeptr); (XPG4)
size_t wcsftime (wchar_t *wcs, size_t maxsize, const wchar_t *format, const struct tm *timeptr); (ISO C)
wcs
結果として得られるワイド文字列へのポインタ。maxsize
結果として得られる文字列に格納されるワイド文字の数の最大値。format
出力文字列の形式を制御する文字列へのポインタ。 XPG4 インタフェースでは,この引数は定数文字列へのポインタです。 ISO C インターフェスでは,定数ワイド文字列へのポインタです。timeptr
ローカル時刻構造体へのポインタ。 tm構造体は <time.h>ヘッダ・ファイルに定義されています。
wcsftime関数は, timeptr がポイントする構造体の中のデータを使用して, wcs がポイントするワイド文字列を作成します。 wcs には最高で maxsize 個のワイド文字がコピーされます。書式文字列はゼロ個以上の変換指定と通常の文字から構成されます。すべての通常の文字は (終端の null 文字を含めて) 変更なしに出力文字列にコピーされます。変換指定は, tm構造体の中のデータが出力文字列にどのようにフォーマットされるかを定義します。
変換指定はパーセント (%) 文字,1 つまたは複数のオプションの文字 ( 表 REF-13 を参照),および変換指定子 ( 表 REF-14 を参照) から構成されます。 表 REF-13 に示しているオプション文字が変換指定に含まれる場合,それらの文字は表に示した順序で現れなくてはなりません。
表 REF-13 wcsftime 変換指定のオプション要素 要素 意味 -- フィールド幅にオプションとして付け,そのフィールドが左揃えされ,スペースでパディングされることを示す。0 要素と同時に使用することはできない。 0 フィールド幅にオプションとして付け,そのフィールドが右揃えされ,ゼロでパディングされることを示す。 -- 要素と同時に使用することはできない。 フィールド幅 最大フィールド幅を指定する 10 進整数。 .精度 フィールド内のデータの精度を指定する 10 進整数。 d, H, I, j, m, M, o, S, U, w, W, y, および Y 変換指定子では,精度指定子は,フィールド内の桁数の最小値である。変換指定が精度によって指定された桁数よりも少ない場合には,先頭にゼロが追加される。
a, A, b, B, c, D, E, h, n, N, p, r, t, T, x, X, Z, および % 変換指定子では,精度指定子は,フィールド内のワイド文字数の最大値である。変換指定が精度によって指定された桁数よりも多く文字を含んでいる場合には,右側の文字が切り捨てられる。
d, H, I, m, M, o, S, U, w, W, y, および Y 変換指定子のデフォルトの精度は 2 である。 j 変換指定子のデフォルトの精度は 3 である。
表 REF-13 の変換指定のオプション要素のリストは, XPG4 仕様の弊社による拡張であることに注意してください。
表 REF-14 は変換指定子を示しています。 wcsftime関数は,プログラムの現在のロケールの LC_TIME カテゴリのフィールドから値を取得します。たとえば, %Bが指定されている場合,関数は LC_TIME の mon フィールドにアクセスして, tm構造体で指定された月の完全な名前を取得します。無効な変換指定子を使用したときの結果は未定義です。
表 REF-14 wcsftime の変換指定子 指定子 置き換え a ロケールの短縮された曜日名。 A ロケールの完全な曜日名。 b ロケールの短縮された月の名前。 B ロケールの完全な月の名前。 c ロケールの適切な日付および時刻表現。 C 10 進数 (00〜99) として表現される世紀 ( 年を 100 で割り,整数に切り捨て )。 d その月の 10 進数 (00〜31) として表現される日付。 D %m/%d/%y と同じ。 e 先頭がスペース文字でフィルされた 2 桁のフィールドに格納される,その月の 10 進数 (1〜31) として表現される日付。 Ec ロケールの代替日付および時刻表現。 EC ロケールの代替表現における基本年 (期間) の名前。 Ex ロケールの代替日付表現。 Ey ロケールの代替表現における基本年 ( %EC ) からのオフセット。 EY ロケールの完全な代替年表現。 h %b と同じ。 H 10 進数 (00〜23) としての時刻 (24 時間制)。 I 10 進数 (01〜12) としての時刻 (12 時間制)。 j 10 進数 (001〜366) としての,その年の中での日。 m 10 進数 (01〜12) としての月。 M 10 進数 (00〜59) としての分。 n 改行文字。 Od ロケールの代替数値シンボルを使用した,その月の中での日。 Oe ロケールの代替数値シンボルを使用した,その月の中での日付。 OH ロケールの代替数値シンボルを使用した時刻 (24 時間制)。 OI ロケールの代替数値シンボルを使用した時刻 (12 時間制)。 Om ロケールの代替数値シンボルを使用した月。 OM ロケールの代替数値シンボルを使用した分。 OS ロケールの代替数値シンボルを使用した秒。 Ou ロケールの代替表現での曜日を数値で表したもの ( 月曜日 =1)。 OU ロケールの代替数値シンボルを使用した,その年の中での週 (週は日曜日から始まる)。 OV ロケールの代替数値シンボルを使用した,10 進数 (01〜53) としての,その年の中での週 (週は月曜日から始まる)。1 月 1 日を含んでいる週が,新年に 4 日以上ある場合には,その週が 1 番目の週と見なされる。そうでなければ,前年の 53 番目の週と見なされ,次の週が 1 番目の週となる。 Ow ロケールの代替数値シンボルを使用した,数値としての曜日 (日曜日 =0)。 OW ロケールの代替数値シンボルを使用した,その年の中での数値としての週 (週は月曜日から始まる)。 Oy ロケールの代替数値シンボルを使用した,世紀を除いた年。 p ロケールの 12 時間制における AM/PM 指定。 r AM/PM 表記での時刻。 R 24 時間表記での時刻 ( %H:%M )。 S 10 進数 (00〜61) としての秒。 t タブ文字。 T 時刻 ( %H:%M:%S )。 u 1〜7 の範囲の 10 進数としての曜日 (月曜日 =1)。 U 10 進数 (00〜53) としての,その年の中での週 (最初の日曜日が 1 番目の週の最初の日と見なされる)。 V 10 進数 (00〜53) としての,その年の中ので週 (週は月曜日から始まる)。1 月 1 日を含んでいる週が,新年に 4 日以上ある場合には,その週が 1 番目の週と見なされる。そうでなければ,前年の 53 番目の週と見なされ,次の週が 1 番目の週となる。 w 10 進数 (0 [日曜日]〜6) としての曜日。 W 10 進数 (00〜53) としての,その年の中での週 (最初の月曜日が 1 番目の週の最初の日と見なされる)。 x ロケールの適切な日付表現。 X ロケールの適切な時刻表現。 y 10 進数 (00〜99) としての,世紀を除いた年。 Y 10 進数としての,世紀を含んだ年。 Z タイム・ゾーン名またはその短縮形。タイム・ゾーン情報がない場合には,文字は出力されない。 % リテラルの % 文字。
x wcs がポイントする配列に格納されたワイド文字数。終端の null 文字は含まれません。 0 エラーが発生したことを示します。配列の内容は不定です。
前へ 次へ 目次 索引