前へ | 次へ | 目次 | 索引 |
この例のプログラムを実行すると,次の出力が生成されます。
International: USD 102,593,421.00 National: $102,593,421.00 National: $**102,593,421.00 National: ($102,593,421.00) National: 102593421.00 |
tm構造体に格納されている日付および時刻情報を使って出力文字列を作成します。出力文字列の書式は書式文字列によって制御されます。
#include <time.h>関数バリアント _DECC_V4_SOURCE および _VMS_V6_SOURCE 機能テスト・マクロを定義してコンパイルすると,OpenVMS バージョン 7.0 およびそれ以前の動作と等価な, strftime関数へのローカル時刻ベースのエントリ・ポイントが使用可能となります。size_t strftime (char *s, size_t maxsize, const char *format, const struct tm *timeptr);
s
結果として得られる文字列へのポインタ。maxsize
結果として得られる文字列に格納される最大バイト数 ( 終端の null を含みます )。format
出力文字列の書式を制御する文字列へのポインタ。timeptr
ローカル時刻 ( tm) 構造体へのポインタ。 tm構造体は <time.h>ヘッダ・ファイルに定義されています。
strftime関数は,timeptr がポイントする構造体に含まれているデータを使用して,s がポイントする文字列を作成します。最高 maxsize バイトが s にコピーされます。書式文字列は,0 個以上の変換指定と通常の文字から構成されています。すべての通常の文字は ( 終端の null 文字を含めて ),変更なしに出力文字列にコピーされます。変換指定は, tm構造体の中のデータが,出力文字列でどのように整形されるかを定義します。
変換指定は,パーセント文字 (%), 1 つまたは複数のオプションの文字 ( 表 REF-7 を参照 ),および変換指定子 ( 表 REF-8 を参照) から構成されます。 表 REF-7 に示しているオプション文字が指定される場合,それらの文字は表に示した順序で現れなくてはなりません。
strftime関数は, tzsetを呼び出した場合と同じように動作します。
表 REF-7 strftime 変換指定のオプション要素 要素 意味 -- フィールド幅にオプションとして付け,そのフィールドが左揃えされ,スペースでパディングされることを示す。0 要素と同時に使用することはできない。 0 フィールド幅にオプションとして付け,そのフィールドが右揃えされ,ゼロでパディングされることを示す。 -- 要素と同時に使用することはできない。 フィールド幅 最大フィールド幅を指定する 10 進整数。 .precision フィールド内のデータの精度を指定する 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-7 の変換指定のリストは, XPG4 仕様の拡張であることに注意してください。
表 REF-8 は変換指定子を示しています。 strftime関数は,プログラムの現在のロケールの LC_TIME カテゴリのフィールドから値を取得します。たとえば, %Bが指定されている場合,関数は LC_TIME の mon フィールドにアクセスして, tm構造体で指定された月の完全な名前を取得します。無効な変換指定子を使用したときの結果は未定義です。
表 REF-8 strftime の変換指定子 指定子 置き換え a ロケールの短縮された曜日名。 A ロケールの完全な曜日名。 b ロケールの短縮された月の名前。 B ロケールの完全な月の名前。 c ロケールの適切な日付および時刻表現。 C 10 進数 (00〜99) として表現される世紀 (年を 100 で割り,整数に切り捨て)。 d その月の 10 進数 (01〜31) として表現される日付。 D %m/%d/%y と同じ。 e 先頭がスペース文字でフィルされた 2 桁のフィールドに格納される,その月の 10 進数 (1〜31) として表現される日付。 Ec ロケールの代替日付および時刻表現。 EC ロケールの代替表現における基本年 (期間) の名前。 Ex ロケールの代替日付表現。 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 s がポイントする配列に格納された文字数。終端の null 文字は含まれません。 0 エラーが発生したことを示します。配列の内容は不定です。
#include <stdlib.h> #include <stdio.h> #include <time.h> #include <locale.h> #include <errno.h> #define NUM_OF_DATES 7 #define BUF_SIZE 256 /* This program formats a number of different dates, once */ /* using the C locale and then using the fr_FR.ISO8859-1 */ /* locale. Date and time formatting is done using strftime(). */ main() { int count, i; char buffer[BUF_SIZE]; struct tm *tm_ptr; time_t time_list[NUM_OF_DATES] = {500, 68200000, 694223999, 694224000, 704900000, 705000000, 705900000}; /* Display dates using the C locale */ printf("\nUsing the C locale:\n\n"); setlocale(LC_ALL, "C"); for (i = 0; i < NUM_OF_DATES; i++) { /* Convert to a tm structure */ tm_ptr = localtime(&time_list[i]); /* Format the date and time */ count = strftime(buffer, BUF_SIZE, "Date: %A %d %B %Y%nTime: %T%n%n", tm_ptr); if (count == 0) { perror("strftime"); exit(EXIT_FAILURE); } /* Print the result */ printf(buffer); } /* Display dates using the fr_FR.ISO8859-1 locale */ printf("\nUsing the fr_FR.ISO8859-1 locale:\n\n"); setlocale(LC_ALL, "fr_FR.ISO8859-1"); for (i = 0; i < NUM_OF_DATES; i++) { /* Convert to a tm structure */ tm_ptr = localtime(&time_list[i]); /* Format the date and time */ count = strftime(buffer, BUF_SIZE, "Date: %A %d %B %Y%nTime: %T%n%n", tm_ptr); if (count == 0) { perror("strftime"); exit(EXIT_FAILURE); } /* Print the result */ printf(buffer); } }
この例のプログラムを実行すると,次の出力が生成されます。
Using the C locale: Date: Thursday 01 January 1970 Time: 00:08:20 Date: Tuesday 29 February 1972 Time: 08:26:40 Date: Tuesday 31 December 1991 Time: 23:59:59 Date: Wednesday 01 January 1992 Time: 00:00:00 Date: Sunday 03 May 1992 Time: 13:33:20 Date: Monday 04 May 1992 Time: 17:20:00 Date: Friday 15 May 1992 Time: 03:20:00 Using the fr_FR.ISO8859-1 locale: Date: jeudi 01 janvier 1970 Time: 00:08:20 Date: mardi 29 f□rier 1972 Time: 08:26:40 Date: mardi 31 d□embre 1991 Time: 23:59:59 Date: mercredi 01 janvier 1992 Time: 00:00:00 Date: dimanche 03 mai 1992 Time: 13:33:20 Date: lundi 04 mai 1992 Time: 17:20:00 Date: vendredi 15 mai 1992 Time: 03:20:00 |
ASCII 文字列の長さを返します。返される長さには,終端の null 文字 (\0) は含まれません。
#include <string.h>size_t strlen (const char *str);
str
文字列へのポインタ。
x 文字列の長さ。
2 つの 7 ビット ASCII 文字列の間で,大文字小文字を区別しない比較を行います。
#include <strings.h>int strncasecmp (const char *s1, const char *s2, size_t n);
s1
比較する 2 つの文字列のうちの第 1 のもの。s2
比較する 2 つの文字列のうちの第 2 のもの。n
比較する文字列に含まれる最大バイト数。
strncasecmp関数は大文字小文字を区別しません。返される字句的な違いは,小文字に変換されています。 strncasecmp関数は strcasecmp関数に似ていますが,サイズの比較も行います。NULL よりも前に n によって指定されるサイズが読み込まれた場合には,比較は停止します。strcasecmp関数は 7 ビット ASCII の比較のみを行います。国際化されたアプリケーションでは,この関数は使用しないようにしてください。
n s1 文字列が s2 文字列よりも大きい,等しい,または小さい場合に,それぞれ 0 よりも大きい,等しい,または小さい整数値。
str_2 から str_1 の末尾に, maxchar 個以下の文字を付加します。
#include <string.h>関数バリアント strncat関数は,それぞれ 32 ビットと 64 ビットのポインタ・サイズで使用するための _strncat32と _strncat64という名前のバリアントを持っています。ポインタ・サイズ固有の関数の使用方法については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.10 節を参照してください。char *strncat (char *str_1, const char *str_2, size_t maxchar);
str_1, str_2
null で終了する文字列へのポインタ。maxchar
str_2 から連結する文字数。先に str_2 の中で strncatが終端の null を検出した場合には,そこで終了します。maxchar が 0 の場合には, str_2 から文字のコピーは行われません。
strncat関数の結果には,つねに null 文字が付加されます。 strncatは,指定された上限に達すると, str_1 の中の次のバイトを null 文字に設定します。
x 第 1 引数 str_1 のアドレス。これは,連結された結果を保持できるだけの大きさを持つと仮定されます。
前へ | 次へ | 目次 | 索引 |