前へ | 次へ | 目次 | 索引 |
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 とは異なる方法で処理します。バージョン 6.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 構造体の内容は未定義となります。
#include <string.h> #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 takes a number of date and time strings and */ /* converts them into tm structs using strptime(). These tm */ /* structs are then passed to strftime() which will reverse the */ /* process. The resulting strings are then compared with the */ /* originals and if a difference is found then an error is */ /* displayed. */ main() { int count, i; char buffer[BUF_SIZE]; char *ret_val; struct tm time_struct; char dates[NUM_OF_DATES][BUF_SIZE] = { "Thursday 01 January 1970 00:08:20", "Tuesday 29 February 1972 08:26:40", "Tuesday 31 December 1991 23:59:59", "Wednesday 01 January 1992 00:00:00", "Sunday 03 May 1992 13:33:20", "Monday 04 May 1992 17:20:00", "Friday 15 May 1992 03:20:00"}; for (i = 0; i < NUM_OF_DATES; i++) { /* Convert to a tm structure */ ret_val = strptime(dates[i], "%A %d %B %Y %T", &time_struct); /* Check the return value */ if (ret_val == (char *) NULL) { perror("strptime"); exit(EXIT_FAILURE); } /* Convert the time structure back to a formatted string */ count = strftime(buffer, BUF_SIZE, "%A %d %B %Y %T",&time_struct); /* Check the return value */ if (count == 0) { perror("strftime"); exit(EXIT_FAILURE); } /* Check the result */ if (strcmp(buffer, dates[i]) != 0) { printf("Error: Converted string differs from the original\n"); } else { printf("Successfully converted <%s>\n", dates[i]); } } }
この例のプログラムを実行すると,次の出力が生成されます。
Successfully converted <Thursday 01 January 1970 00:08:20> Successfully converted <Tuesday 29 February 1972 08:26:40> Successfully converted <Tuesday 31 December 1991 23:59:59> Successfully converted <Wednesday 01 January 1992 00:00:00> Successfully converted <Sunday 03 May 1992 13:33:20> Successfully converted <Monday 04 May 1992 17:20:00> Successfully converted <Friday 15 May 1992 03:20:00> |
前へ | 次へ | 目次 | 索引 |