; hp; ヒューレット・パッカード;hewlett-packard; ヒューレット;コンパック;compaq; OS; OpenVMS;高い信頼性とスケーラビリティを提供するOS"> - OpenVMSのマニュアルページです。">
日本-日本語

 >  マニュアル >  V8.3ライブラリ

OpenVMS マニュアル


HP OpenVMS
HP C ランタイム・ライブラリ・
リファレンス・マニュアル (下巻)


前へ 次へ 目次 索引



#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> 




strrchr

null で終了する文字列の中の,特定の文字の最後のオカレンスのアドレスを返します。



形式

#include <string.h>

char *strrchr (const char *str, int character);

関数バリアント strrchr関数は,それぞれ 32 ビットと 64 ビットのポインタ・サイズで使用するための _strrchr32_strrchr64という名前のバリアントを持っています。ポインタ・サイズ固有の関数の使用方法については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.10 節を参照してください。


引数



str

null で終了する文字列へのポインタ。

character

int型のオブジェクト。



説明

この関数は,null で終了する文字列の中を先頭から調べて,指定した文字が最後に見つかったアドレスを返します。終端の null 文字は,文字列の一部と見なされます。

これとは対照的に, strchrでは, null で終了する文字列の中を先頭から調べて,指定した文字が最初に見つかったアドレスを返します。




戻り値

x 指定された文字の最後のオカレンスのアドレス。
NULL 文字が文字列に含まれていないことを示します。




strsep

文字列を分割します。



形式

#include <string.h>

char *strsep (char **stringp, char *delim);

関数バリアント strsep関数は,それぞれ 32 ビットと 64 ビットのポインタ・サイズで使用するための _strsep32_strsep64という名前のバリアントを持っています。ポインタ・サイズ固有の関数の使用方法については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.10 節を参照してください。


引数



stringp

文字列へのポインタへのポインタ。

delim

区切り文字として使用する文字を含んでいる文字列へのポインタ。



説明

strsep関数は,stringp の中で, delim に含まれる任意の文字 (または終端の '\0' 文字) の最初のオカレンスを探し,それを '\0' に置き換えます。区切り文字 ( または文字列の終端に達した場合は NULL) の次の文字の位置が stringp 引数に格納されます。 stringp 引数の元の値が返されます。

区切り文字が 2 つ隣接していたときに生じる「空」のフィールドは, stringp 引数に返されたポインタが参照している位置を '\0' と比較することで検出できます。

stringp 引数が初期状態で NULL だった場合, strsepは NULL を返します。




戻り値

x stringp がポイントする文字列のアドレス。
NULL stringp が NULL であることを示します。




次の例は, strsepを使用して,空白で区切られたトークンを含んでいる文字列を解析し,引数のベクトルに格納します。


char **ap, **argv[10], *inputstring; 
 
for (ap = argv; (*ap = strsep(&inputstring, " \t")) != NULL;) 
     if (**ap != '\0') 
         ++ap; 




strspn

文字列の,文字のセットに含まれている文字のみから構成される接頭辞の長さを返します。



形式

#include <string.h>

size_t strspn (const char *str, const char *charset);




引数



str

文字列へのポインタ。この文字列が null 文字列だった場合には,0 が返されます。

charset

関数が検索の対象とする文字を含んでいる文字列へのポインタ。



説明

strspn関数は,文字列の中の文字をスキャンし, charset に含まれていない文字を検出した時点で停止し, charset に含まれている文字から構成される文字列の最初のセグメントの長さを返します。



戻り値

x セグメントの長さ。




strstr

s1 がポイントしている文字列の中での, s2 がポイントしている文字列に含まれる文字のシーケンスの最初のオカレンスを探します。



形式

#include <string.h>

char *strstr (const char *s1, const char *s2);

関数バリアント strstr関数は,それぞれ 32 ビットと 64 ビットのポインタ・サイズで使用するための _strstr32_strstr64という名前のバリアントを持っています。ポインタ・サイズ固有の関数の使用方法については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.10 節を参照してください。


引数



s1, s2

文字列へのポインタ。



戻り値

ポインタ 発見された文字列へのポインタ。
NULL 文字列が発見されなかったことを示します。





#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 
 
main() 
{ 
    static char lookin[]="that this is a test was at the end"; 
    
    putchar('\n'); 
    printf("String: %s\n", &lookin[0] ); 
    putchar('\n'); 
    printf("Addr: %s\n", &lookin[0] ); 
    printf("this: %s\n", strstr( &lookin[0] ,"this") ); 
    printf("that: %s\n", strstr( &lookin[0] , "that" ) ); 
    printf("NULL: %s\n", strstr( &lookin[0], "" ) ); 
    printf("was: %s\n", strstr( &lookin[0], "was" ) ); 
    printf("at: %s\n", strstr( &lookin[0], "at" ) ); 
    printf("the end: %s\n", strstr( &lookin[0], "the end") ); 
    putchar('\n'); 
    
    exit(0); 
} 

この例は,次の結果を生成します。


$ RUN STRSTR_EXAMPLE
String: that this is a test was at the end
Addr: that this is a test was at the end
this: this is a test was at the end
that: that this is a test was at the end
NULL: that this is a test was at the end
was: was at the end
at: at this is a test was at the end
the end: the end
$ 




strtod

指定された文字列を倍精度の数値に変換します。



形式

#include <stdlib.h>

double strtod (const char *nptr, char **endptr);

関数バリアント strtod関数は,それぞれ 32 ビットと 64 ビットのポインタ・サイズで使用するための _strtod32_strtod64という名前のバリアントを持っています。ポインタ・サイズ固有の関数の使用方法については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.10 節を参照してください。


引数



nptr

倍精度の数値に変換する文字列へのポインタ。

endptr

関数が,スキャンを終了させた最初の認識不可能な文字のアドレスを格納できるオブジェクトのアドレス。 endptr が NULL ポインタである場合,最初の認識不可能な文字のアドレスは保存されません。



説明

strtod関数は,オプションとして空白文字 ( isspaceの定義に従う) のシーケンスを,さらにオプションのプラスまたはマイナス記号を,さらにオプションとして基数文字を含んだ数字のシーケンスを,さらにオプションの文字 (e または E) を,最後にオプションの符号付きの整数を認識します。最初の認識不可能な文字が現れた時点で,変換は終了します。

文字列は,浮動小数点定数を解釈するときに使用されるのと同じ規則によって解釈されます。

基数文字は,プログラムの現在のロケール (カテゴリ LC_NUMERIC) によって定義されます。

この関数は,変換後の値を返します。 strtodでは,オーバフローは次のように処理されます。

  • 正しい値がオーバフローを引き起こす場合には, ( 値の符号に従ってプラスまたはマイナス記号が付いた ) HUGE_VAL が返され, errnoは ERANGE に設定される。

  • 正しい値がアンダフローを引き起こす場合には,0 が返され, errnoは EINVAL に設定される。

文字列が認識不可能な文字から始まっている場合には,変換は実行されない。 *entptrnptr に設定され,0 の値が返され, errnoは EINVAL に設定される。




戻り値

x 変換された文字列。
0 変換が実行できなかったことを示します。 errno は以下のいずれかに設定されます。

  • EINVAL - 変換は実行できなかった。

  • ERANGE - 値はアンダフローを引き起こす。

  • ENOMEM - 内部変換バッファ用のメモリが足りなかった。

±HUGE_VAL オーバフローが発生しました。 errno は ERANGE に設定されます。




strtok, strtok_r

文字列をトークンに分解します。



形式

#include <string.h>

char *strtok (char *s1, const char *s2);

char *strtok_r (char *s, const char *sep, char **lasts);

関数バリアント strtok関数は,それぞれ 32 ビットと 64 ビットのポインタ・サイズで使用するための _strtok32_strtok64という名前のバリアントを持っています。同様に, strtok_r関数には, _strtok_r32_strtok_r64というバリアントがあります。ポインタ・サイズ固有の関数の使用方法については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.10 節を参照してください。


引数



s1

最初の呼び出しでは,ゼロ個以上のテキスト・トークンを含んでいる文字列へのポインタ。その文字列に対するそれ以降のすべての呼び出しでは,NULL ポインタ。

s2

1 つまたは複数の文字から構成される区切り文字列へのポインタ。区切り文字列は呼び出しごとに異なっていても構いません。

s

区切り文字列 sep の 1 個以上の文字で区切られた,ゼロ個以上のトークンのシーケンスである,null で終わる文字列。

sep

区切り文字の,null で終わる文字列。この区切り文字列は,呼び出しごとに異なっても構いません。

lasts

strtok_rが同じ文字列のスキャンを続けるために必要とする情報を格納するためのユーザ提供ポインタを指すポインタ。



説明

strtok関数は,指定された文字列内で,テキスト・トークンを見つけます。テキスト・トークンは,ユーザが指定した区切り文字列内の 1 個以上の文字で区切られます。この関数は,呼び出し間をまたいで文字列内でのトークンの位置を把握しています。そして,呼び出しが連続して行われると,以前の呼び出して識別されたトークンの次のテキスト・トークンを識別して,文字列全体を処理します。

s1 の中のトークンは,区切り文字列 s2 に含まれていない最初の文字から始まり,文字列の終端か,区切り文字の手前で終了します。

strtok関数の最初の呼び出しでは,最初のトークンに含まれている最初の文字へのポインタが返され, s1 の中の返されたトークンの直後に null 文字が書き込まれます。それ以降の (第 1 引数の値を NULL のままにした) 個々の呼び出しでは, s1 がもともとポイントしていた文字列の中の,その次のトークンへのポインタが返されます。文字列にトークンが残っていない場合, strtok関数は NULL ポインタを返します ( これは,文字列が空であるか,区切り文字のみを含んでいる場合には, strtokの最初の呼び出しでも起こります )。

strtokはトークンを区切るために s1 に null 文字を挿入するので, s1constオブジェクトであってはなりません。

strtok_r関数は, strtokのリエントラント・バージョンです。 strtok_r関数は, null で終了する文字列 s を,区切り文字列 sep 内の 1 個以上の文字で区切られた,ゼロ個以上のテキスト・トークンのシーケンスと見なします。 lasts 引数は,同じ文字列のスキャンを続けるために strtok_rが必要とする情報を格納するためのユーザ提供ポインタを指します。

strtok_rの 1 回目の呼び出しでは, s は null で終わる文字列を指し, sep は区切り文字の,null で終わる文字列を指し, lasts が指す値は無視されます。 strtok_r関数は, 1 番目のトークンの 1 番目の文字へのポインタを返し, s 内の,返したトークンの直後の位置に null 文字を書き込み, lasts が指しているポインタをアップデートします。

以降の呼び出しでは,呼び出すたびに文字列 s 上を移動するように, s は NULL ポインタとし, lasts は以前の呼び出しのままとします。残りのトークンがなくなるまで,次々とトークンが返されます。区切り文字列 sep は,呼び出しごとに異なっていても構いません。 s 内にトークンが残っていない場合は, NULL ポインタが返されます。




戻り値

x 文字列内の,検出されたトークンの 1 文字目へのポインタです。
NULL 文字列内にトークンが残っていないことを示します。






#1

#include <stdio.h> 
#include <string.h> 
 
main() 
{ 
    static char str[] = "...ab..cd,,ef.hi"; 
    
    printf("|%s|\n", strtok(str, ".")); 
    printf("|%s|\n", strtok(NULL, ",")); 
    printf("|%s|\n", strtok(NULL, ",.")); 
    printf("|%s|\n", strtok(NULL, ",.")); 
} 
 

この例のプログラムを実行すると,次の結果が出力されます。


$ RUN STRTOK_EXAMPLE1
|ab| 
|.cd| 
|ef| 
|hi| 
$ 

#2

#include <stdio.h> 
#include <string.h> 
 
main() 
{ 
   char *ptr, 
        string[30]; 
 
   /* The first character not in the string "-" is "A".  The   */ 
   /* token ends at "C.                                        */ 
 
    strcpy(string, "ABC"); 
    ptr = strtok(string, "-"); 
    printf("|%s|\n", ptr); 
 
    /* Returns NULL because no characters not in separator      */ 
    /* string "-" were found (i.e.  only separator characters   */ 
    /* were found)                                              */ 
 
    strcpy(string, "-"); 
    ptr = strtok(string, "-"); 
    if (ptr == NULL) 
        printf("ptr is NULL\n"); 
 
}  
 

この例のプログラムを実行すると,次の結果が出力されます。


$ RUN STRTOK_EXAMPLE2
|abc| 
ptr is NULL 
$ 


前へ 次へ 目次 索引



         印刷用画面へ

プライバシー 本サイト利用時の合意事項