HP OpenVMS Systems Documentation |
| 前へ | 次へ | 目次 | 索引 |
#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 のアドレス。これは,連結された結果を保持できるだけの大きさを持つと仮定されます。
2 つの ASCII 文字列の間で maxchar 個以下の文字を比較し,第 1 の文字列に含まれる個々の文字の ASCII 値が第 2 の文字列の値よりも小さい,等しい,または大きいことを示す負の整数,0,または正の整数を返します。
#include <string.h>int strncmp (const char *str_1, const char *str_2, size_t maxchar);
str_1, str_2
文字列へのポインタ。maxchar
str_1 と str_2 の両方で検索する文字数の上限 ( 最初の文字を含みます )。maxchar が 0 の場合には,比較は行われず,0 が返されます (文字列は等しいものと見なされます)。
strncmp関数は, str_1 がポイントする文字列の maxchar 個以下の文字を, str_2 がポイントする文字列と比較します。文字列の比較は,null 文字が検出されるか,文字列に違いが発見されるか, maxchar に達するまで行われます。違いが発見された後の文字や null 文字の後の文字は比較されません。
< 0 str_1 が str_2 よりも小さいことを示します。 = 0 str_1 が str_2 と等しいことを示します。 > 0 str_1 が str_2 よりも大きいことを示します。
| #1 |
|---|
#include <string.h>
#include <stdio.h>
main()
{
printf( "%d\n", strncmp("abcde", "abc", 3));
}
|
この例をリンクして実行すると,2 つの文字列の先頭の 3 文字が等しいため, 0 が返されます。
$ run tmp 0
| #2 |
|---|
#include <string.h>
#include <stdio.h>
main()
{
printf( "%d\n", strncmp("abcde", "abc", 4));
}
|
この例をリンクして実行すると,2 つの文字列の先頭の 4 文字は等しくないため, 0 よりも大きい値が返されます (第 1 の文字列の "d" が,第 2 の文字列の null 文字と等しくありません)。
$ run tmp 100
source の maxchar 個以下の文字を dest にコピーします。
#include <string.h>関数バリアント strncpy関数は,それぞれ 32 ビットと 64 ビットのポインタ・サイズで使用するための _strncpy32と _strncpy64という名前のバリアントを持っています。ポインタ・サイズ固有の関数の使用方法については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.10 節を参照してください。char *strncpy (char *dest, const char *source, size_t maxchar);
dest
デスティネーション文字列へのポインタ。source
ソース文字列へのポインタ。maxchar
source から dest にコピーする文字数の上限。 source の終端の null 文字は含みません。
strncpy関数は, source の maxchar 個以下の文字を dest にコピーします。source の終端の null 文字は含みません。 source が含んでいる文字が maxchar 個よりも少ない場合, dest には null 文字がパディングされます。 source が含んでいる文字が maxchar 個以上である場合には,可能な限り多くの文字が dest にコピーされます。 strncpyを呼び出した後の dest 引数は,終端に null 文字がない場合があることに注意してください。
x dest のアドレス。
文字列の中のバイト数を返します。
#include <string.h>size_t strnlen (const char *s, size_t n);
s
文字列へのポインタ。n
確認する文字数の最大値。
strnlen関数は, s がポイントする文字列の中のバイト数を返します。文字列長の値は,終端の null 文字を含みません。 strnlen関数は,最初の null バイトを検出するか, n 個のバイトを確認するまで,バイトのカウントを行います。
n 文字列の長さ。
文字列の中で,指定された文字のセットのうちのいずれかのオカレンスを検索します。
#include <string.h>関数バリアント strpbrk関数は,それぞれ 32 ビットと 64 ビットのポインタ・サイズで使用するための _strpbrk32と _strpbrk64という名前のバリアントを持っています。ポインタ・サイズ固有の関数の使用方法については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.10 節を参照してください。char *strpbrk (const char *str, const char *charset);
str
文字列へのポインタ。この文字列が null 文字列だった場合には,0 が返されます。charset
この関数が探す文字のセットを含んでいる文字列へのポインタ。
strpbrk関数は,文字列の中の文字をスキャンし, charset に含まれている文字を検出した時点で停止し,文字列の中の文字セットに含まれている最初の文字のアドレスを返します。
x 文字列の中の,セットに含まれていた最初の文字のアドレス。 NULL セットに含まれている文字がなかったことを示します。
文字列を, tm構造体に格納される日付および時刻値に変換します。変換は書式文字列によって制御されます。
#include <time.h>関数バリアント strptime関数は,それぞれ 32 ビットと 64 ビットのポインタ・サイズで使用するための _strptime32と _strptime64という名前のバリアントを持っています。ポインタ・サイズ固有の関数の使用方法については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.10 節を参照してください。char *strptime (const char *buf, const char *format, struct tm *timeptr);
buf
変換する文字列へのポインタ。format
入力文字列の変換方法を定義する文字列へのポインタ。timeptr
ローカル時刻構造体へのポインタ。 tm構造体は <time.h>ヘッダ・ファイルに定義されています。
strptime関数は, buf がポイントする文字列を, timeptr がポイントする構造体に格納される値に変換します。 format がポイントする文字列は,変換の実行方法を定義します。strptime関数は, tm構造体の中のフィールドのうち,対応する変換指定が書式に含まれているもののみを変更します。特に, strptimeは tm構造体の tm_isdstメンバは決して設定しません。
書式文字列は 0 個以上のディレクティブから構成されます。ディレクティブは,以下のいずれかから構成されます。
- 1 つまたは複数の空白文字 ( isspace関数の定義に従う)。このディレクティブが指定された場合,関数は空白文字でない最初の文字まで入力を読み込む。
- パーセント文字 (%) または空白文字以外の任意の文字。このディレクティブが指定された場合,関数は次の文字を読み込む。読み込まれた文字は,ディレクティブを構成する文字と同じでなくてはならない。文字が異なった場合,関数は実行に失敗する。
- 変換指定。変換指定は,入力文字列の中の文字が, tm構造体に格納される値としてどのように解釈されるかを定義する。変換指定は,パーセント文字 (%) の後に変換指定子を続けたものである。 表 REF-9 は有効な変換指定を示している。
strptime関数は,プログラムの現在のロケールの LC_TIME カテゴリのフィールドから値を取得します。
注意
X/Open CAE Specification System Interfaces and Headers Issue 5 ( 通称 XPG5) に準拠するために, strptime関数は "%y" ディレクティブを,これまでのバージョンの HP C RTL とは異なる方法で処理します。V6.4 およびそれ以降の C コンパイラでは,世紀内の 2 桁の年について,世紀が指定されていなかった場合, "%y" ディレクティブの値が次のように解釈されます。
- 69〜99 は,20 世紀の年を表す (1969 年から 1999 年まで)
- 00〜68 は,21 世紀の年を表す (2000 年から 2068 年まで)
これまでの (XPG4 準拠の) バージョンの HP C RTL では, strptimeは世紀が指定されない 2 桁の年を, 20 世紀の年として解釈していました。
現在では,XPG-5 準拠の strptimeが, HP C RTL のデフォルト・バージョンとなっています。
以前の XPG4 準拠の strptime関数の動作を利用するには,以下のいずれかを指定します。
- DECC$XPG4_STRPTIME 論理名を次のように定義する:
$ DEFINE DECC$XPG4_STRPTIME ENABLE
または- 関数 decc$strptime_xpg4として, XPG4 の strptimeを直接に呼び出す。
XPG5 バージョンの strptimeに戻すには, DECC$XPG4_STRPTIME 論理名に対して DEASSIGN を実行します:
$ DEASSIGN DECC$XPG4_STRPTIME
表 REF-9 strptime の変換指定 指定 置き換え %a 曜日名。短縮名または完全な名前。 %A %a と同じ。 %b 月の名前。短縮名または完全な名前。 %B %b と同じ。 %c ロケールの日付書式を使用した日付と時刻。 %Ec ロケールの代替日付および時刻表現。 %C 10 進数 (00〜99) としての世紀 (年を 100 で割り,整数に切り捨て)。先頭のゼロは許容される。 %EC ロケールの代替表現での基本年 (期間) の名前。 %d 10 進数 (01〜31) としての,月の中の日。先頭のゼロは許容される。 %Od ロケールの代替数値シンボルを使用した,月の中の日。 %D %m/%d/%y と同じ。 %e %d と同じ。 %Oe ロケールの代替数値シンボルを使用した,月の中の日付。 %h %b と同じ。 %H 10 進数 (00〜23) としての時間 (24 時間制)。先頭のゼロは許容される。 %OH ロケールの代替数値シンボルを使用した時間 (24 時間制)。 %I 10 進数 (01〜12) としての時間 (12 時間制)。先頭のゼロは許容される。 %OI ロケールの代替数値シンボルを使用した時間 (12 時間制)。 %j 10 進数 (001〜366) としての,年の中の日。 %m 10 進数 (01〜12) としての月。先頭のゼロは許容される。 %Om ロケールの代替数値シンボルを使用した月。 %M 10 進数 (00〜59) としての分。先頭のゼロは許容される。 %OM ロケールの代替数値シンボルを使用した分。 %n 任意の空白文字。 %p ロケールの 12 時間制における AM/PM 指定。 %r AM/PM 表記での時刻 ( %I:%M:%S %p )。 %R 24 時間表記での時刻 ( %H:%M )。 %S 10 進数 (00〜61) としての秒。先頭のゼロは許容される。 %OS ロケールの代替数値シンボルを使用した秒。 %t 任意の空白文字。 %T 時刻 ( %H:%M:%S )。 %U 10 進数 (00〜53) としての,その年の週 (最初の日曜日が 1 番目の週の最初の日と見なされる)。先頭のゼロは許容される。 %OU ロケールの代替数値シンボルを使用した,その年の週 (週は日曜日から始まる)。 %w 10 進数としての曜日 (0 [日曜日]〜6)。先頭のゼロは許容される。 %Ow ロケールの代替数値シンボルを使用した,数値としての曜日 (日曜日 =0)。 %W 10 進数 (00〜53) としての,その年の週 (最初の月曜日が 1 番目の週の最初の日と見なされる)。 %OW ロケールの代替数値シンボルを使用した,その年の週 (週は月曜日から始まる)。 %x ロケールの適切な日付表現。 %Ex ロケールの代替日付表現。 %EX ロケールの代替時刻表現。 %X ロケールの適切な時刻表現。 %y 10 進数 (00〜99) としての,世紀を除いた年。 %Ey ロケールの代替表現における基本年 ( %EC ) からのオフセット。 %Oy ロケールの代替数値シンボルを使用した,世紀を除いた年。 %Y 10 進数としての,世紀を含む年。 %EY ロケールの完全な代替年表現。 %% リテラルの % 文字。
x 最後に解析された文字の次の文字へのポインタ。 NULL エラーが発生したことを示します。 tm 構造体の内容は未定義となります。
前へ 次へ 目次 索引