日本-日本語

製品  >  ソフトウェア  >  OpenVMS  >  マニュアル >  V8.3ライブラリ

OpenVMS マニュアル


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


前へ 次へ 目次 索引





strtol

ASCII 文字の文字列を,適切な数値に変換します。



形式

#include <stdlib.h>

long int strtol (const char *nptr, char **endptr, int base);

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


引数



nptr

longに変換する文字列へのポインタ。

endptr

関数が,変換プロセスの中で検出した最初の認識不可能な文字 ( つまり,変換された文字列の中の最後の文字の直後の文字 ) へのポインタを格納できるオブジェクトのアドレス。 endptr が NULL ポインタである場合,最初の認識不可能な文字のアドレスは保存されません。

base

変換の底として使用する 2〜36 の値。



説明

strtol関数は,底の値に応じて,さまざまな形式の文字列を認識します。この関数は,指定された文字列の中の先頭の空白文字 ( <ctype.h>isspaceの定義に従う ) はすべて無視します。オプションのプラスまたはマイナス記号を認識した後に,底の値に応じて整定数を表現する数字または文字のシーケンスを認識します。最初の認識不可能な文字が,変換を終了させます。

オプションの符号の後の先頭のゼロは無視され,底が 16 の場合には 0x と 0X も無視されます。

base が 0 の場合,文字のシーケンスは,整定数を解釈するのに使用されるのと同じ規則によって解釈されます。オプションの符号の後の先頭の 0 は 8 進変換を,先頭の 0x または 0X は 16 進変換を,その他の組み合わせは 10 進変換を示します。

代入の後,または明示的なキャストには ( 算術例外が生じる場合でも ) longから intへの切り捨てが起こることがあります。関数呼び出し atol(str)は, strtol (str, (char**)NULL, 10)と等価です。




戻り値

x 変換された値。
LONG_MAX または LONG_MIN 変換された値がオーバフローを引き起こすことを示します。
0 文字列が認識不可能な文字から始まっている,または base の値が無効であることを示します。文字列が認識不可能な文字から始まっている場合, * endptrnptr に設定されます。




strtoq, strtoll (Alpha, I64)

ASCII 文字の文字列を,適切な数値に変換します。 strtollstrtoqの同義語です。



形式

#include <stdlib.h>

__int64 strtoq (const char *nptr, char **endptr, int base);

__int64 strtoll (const char *nptr, char **endptr, int base);

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


引数



nptr

__int64に変換する文字列へのポインタ。

endptr

関数が,変換プロセスの中で検出した最初の認識不可能な文字 ( つまり,変換された文字列の中の最後の文字の直後の文字 ) へのポインタを格納できるオブジェクトのアドレス。 endptr が NULL ポインタである場合,最初の認識不可能な文字のアドレスは保存されません。

base

変換の底として使用する 2〜36 の値。



説明

strtoq関数と strtoll関数は,底の値に応じて,さまざまな形式の文字列を認識します。指定された文字列内の,先頭の空白文字 ( <ctype.h>isspaceで定義されています) は,無視されます。これらの関数は,オプションのプラスまたはマイナス記号を認識した後に,底の値に従って整定数を表現する数字または文字のシーケンスを認識します。最初の認識不可能な文字が,変換を終了させます。

オプションの符号の後の先頭のゼロは無視され,底が 16 の場合には 0x と 0X も無視されます。

base が 0 の場合,文字のシーケンスは,整定数を解釈するのに使用されるのと同じ規則によって解釈されます。オプションの符号の後の先頭の 0 は 8 進変換を,先頭の 0x または 0X は 16 進変換を,その他の組み合わせは 10 進変換を示します。

関数呼び出し atoq (str)strtoq (str, (char**)NULL, 10)と等価です。




戻り値

x 変換された値。
__INT64_MAX または __INT64_MIN 変換された値がオーバフローを引き起こすことを示します。
0 文字列が認識不可能な文字から始まっている,または base の値が無効であることを示します。文字列が認識不可能な文字から始まっている場合, * endptrnptr に設定されます。




strtoul

nptr がポイントする文字列の最初の部分を, unsigned long整数に変換します。



形式

#include <stdlib.h>

unsigned long int strtoul (const char *nptr, char **endptr, int base);

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


引数



nptr

unsigned longに変換する文字列へのポインタ。

endptr

関数が,変換プロセスの中で検出した最初の認識不可能な文字 ( つまり,変換された文字列の中の最後の文字の直後の文字 ) へのポインタへのポインタを格納できるオブジェクトのアドレス。 endptr が NULL ポインタである場合,最初の認識不可能な文字のアドレスは保存されません。

base

変換の底として使用する 2〜36 の値。オプションの符号の後の先頭のゼロは無視され,底が 16 の場合には 0x と 0X も無視されます。

base が 0 の場合,文字のシーケンスは,整定数を解釈するのに使用されるのと同じ規則によって解釈されます。オプションの符号の後の先頭の 0 は 8 進変換を,先頭の 0x または 0X は 16 進変換を,その他の組み合わせは 10 進変換を示します。




戻り値

x 変換された値。
0 文字列が認識不可能な文字から始まっている,または base の値が無効であることを示します。文字列が認識不可能な文字から始まっている場合, * endptrnptr に設定されます。
ULONG_MAX 変換された値がオーバフローを引き起こすことを示します。




strtouq, strtoull (Alpha, I64)

nptr がポイントする文字列の最初の部分を, unsigned __int64整数に変換します。 strtoullstrtouqの同義語です。



形式

#include <stdlib.h>

unsigned __int64 strtouq (const char *nptr, char **endptr, int base);

unsigned __int64 strtoull (const char *nptr, char **endptr, int base);

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


引数



nptr

unsigned __int64に変換する文字列へのポインタ。

endptr

関数が,変換プロセスの中で検出した最初の認識不可能な文字 ( つまり,変換された文字列の中の最後の文字の直後の文字 ) へのポインタへのポインタを格納できるオブジェクトのアドレス。 endptr が NULL ポインタである場合,最初の認識不可能な文字のアドレスは保存されません。

base

変換の底として使用する 2〜36 の値。オプションの符号の後の先頭のゼロは無視され,底が 16 の場合には 0x と 0X も無視されます。

base が 0 の場合,文字のシーケンスは,整定数を解釈するのに使用されるのと同じ規則によって解釈されます。オプションの符号の後の先頭の 0 は 8 進変換を,先頭の 0x または 0X は 16 進変換を,その他の組み合わせは 10 進変換を示します。




戻り値

x 変換された値。
0 文字列が認識不可能な文字から始まっている,または base の値が無効であることを示します。文字列が認識不可能な文字から始まっている場合, * endptrnptr に設定されます。
__UINT64_MAX 変換された値がオーバフローを引き起こすことを示します。




strxfrm

変更後の文字列を strcmp関数に渡したときに,未変更の文字列を strcoll関数に渡したときと同じ結果が得られるように,文字列を変更します。



形式

#include <string.h>

size_t strxfrm (char *s1, const char *s2, size_t maxchar);




引数



s1, s2

文字列へのポインタ。

maxchar

s1 に格納するバイト数の最大値 (終端の null を含みます)。



説明

strxfrm 関数は, s2 がポイントしている文字列を変換し,結果として得られた文字列を,s1 がポイントする配列に格納します。 s1 がポイントする配列には,終端の null を含めて, maxchar バイト以下の文字が格納されます。

maxchar の値が,変換後の文字列 ( 終端の null を含む ) を格納するのに必要なサイズよりも小さかった場合, s1 がポイントする配列の内容は不定となります。この場合,関数は変換後の文字列のサイズを返します。

maxchar が 0 の場合,s1 は NULL ポインタであってよく,関数は変換を行う前に,s1 配列の必要なサイズを返します。

文字列比較関数の strcollstrcmpは,比較する 2 つの文字列を与えられたときに,異なる結果を生成することがあります。これは, strcmpが文字列の中の文字のコード・ポイント値を単純に比較するのに対し, strcollが比較のためにロケール情報を使用することが原因です。ロケールによっては, strcollによるの比較はマルチパスの操作になり, strcmpよりも速度が遅くなります。

strxfrm関数の目的は, 2 つの変換後の文字列を strcmp関数に渡したときの結果が, 2 つの元の文字列を strcoll関数に渡したときと同じになるように,文字列を変換することです。 strxfrm関数は,同じ文字列に対して strcollを使って多数の比較を行わなくてはならないアプリケーションで有用です。この場合には,(ロケールによっては) strxfrmを使って文字列の変換を行った後に, strcmpで比較を行った方が効率的なことがあります。




戻り値

x s1 がポイントする,結果として得られる文字列の長さ ( 終端の null 文字は含みません )。

エラー条件のための戻り値は予約されていません。ただし,関数は errno を EINVAL に設定することがあります。 s2 がポイントする文字列は,照合シーケンスのドメイン外の文字を含んでいます。





/* This program verifies that two transformed strings when      */ 
/* passed through strxfrm and then compared, provide the same   */ 
/* result as if passed through strcoll without any              */ 
/* transformation.  
 
#include <string.h>                                        
#include <stdio.h> 
#include <stdlib.h> 
#include <locale.h> 
 
#define  BUFF_SIZE  256 
 
main() 
{ 
    char string1[BUFF_SIZE]; 
    char string2[BUFF_SIZE]; 
    int errno; 
    int coll_result; 
    int strcmp_result; 
    size_t strxfrm_result1; 
    size_t strxfrm_result2; 
 
    /* setlocale to French locale */ 
 
    if (setlocale(LC_ALL, "fr_FR.ISO8859-1") == NULL) { 
        perror("setlocale"); 
        exit(EXIT_FAILURE); 
    } 
 
    /* collate string 1 and string 2 and store the result */ 
 
    errno = 0; 
    coll_result = strcoll("<a`>bcd", "abcz"); 
    if (errno) { 
        perror("strcoll"); 
        exit(EXIT_FAILURE); 
    } 
 
    else { 
        /* Transform the strings (using strxfrm) into string1   */ 
        /* and string2                                          */ 
 
        strxfrm_result1 = strxfrm(string1, "<a`>bcd", BUFF_SIZE); 
 
        if (strxfrm_result1 == ((size_t) - 1)) { 
            perror("strxfrm"); 
            exit(EXIT_FAILURE); 
        } 
 
        else if (strxfrm_result1 > BUFF_SIZE) { 
            perror("\n** String is too long **\n"); 
            exit(EXIT_FAILURE); 
        } 
 
        else { 
            strxfrm_result2 = strxfrm(string2, "abcz", BUFF_SIZE); 
            if (strxfrm_result2 == ((size_t) - 1)) { 
                perror("strxfrm"); 
                exit(EXIT_FAILURE); 
            } 
 
            else if (strxfrm_result2 > BUFF_SIZE) { 
                perror("\n** String is too long **\n"); 
                exit(EXIT_FAILURE); 
            } 
 
            /* Compare the two transformed strings and verify   */ 
            /* that the result is the same as the result from   */ 
            /* strcoll on the original strings                  */ 
            else { 
                strcmp_result = strcmp(string1, string2); 
                if (strcmp_result == 0 && (coll_result == 0)) { 
                    printf("\nReturn value from strcoll() and " 
                      "return value from strcmp() are both zero."); 
                   printf("\nThe program was successful\n\n"); 
                } 
 
                else if ((strcmp_result < 0) && (coll_result < 0)) { 
                    printf("\nReturn value from strcoll() and " 
                 "return value from strcmp() are less than zero."); 
                    printf("\nThe program successful\n\n"); 
                } 
 
                else if ((strcmp_result > 0) && (coll_result > 0)) { 
                    printf("\nReturn value from strcoll() and " 
              "return value from strcmp() are greater than zero."); 
                    printf("\nThe program was successful\n\n"); 
                } 
 
                else { 
                printf("** Error **\n"); 
                printf("\nReturn values are not of the same type"); 
                } 
            } 
        } 
   } 
} 

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


Return value from strcoll() and return value 
               from strcmp() are less than zero. 
The program was successful 




subwin

ターミナル・スクリーン上の座標 (begin_y,begin_x) に, numlines 行, numcols カラムの新しいサブウィンドウを作成します。



形式

#include <curses.h>

WINDOW *subwin (WINDOW *win, int numlines, int numcols, int begin_y, int begin_x);




引数



win

親ウィンドウへのポインタ。

numlines

サブウィンドウの中の行の数。numlines が 0 ならば,関数はその値を LINES - begin_y に設定します。 LINES x COLS の大きさのサブウィンドウを得るには,次の形式を使用します。


subwin (win, 0, 0, 0, 0) 



numcols

サブウィンドウの中のカラムの数。numcols が 0 ならば,関数はその値を COLS - begin_x に設定します。 LINES x COLS の大きさのサブウィンドウを得るには,次の形式を使用します。


subwin (win, 0, 0, 0, 0) 



begin_y

サブウィンドウを作成するウィンドウ座標。

begin_x

サブウィンドウを作成するウィンドウ座標。



説明

サブウィンドウを作成するとき,begin_ybegin_x はターミナル・スクリーン全体を基準としています。 numlines または numcols が 0 だった場合, subwin関数はサイズをそれぞれ (LINES - begin_y) または (COLS - begin_x) に設定します。

win がポイントするウィンドウは,サブウィンドウの領域全体が収まるだけの大きさでなくてはなりません。どちらかのウィンドウ内で,サブウィンドウの座標内に加えられた変更は,両方のウィンドウに反映されます。




戻り値

ウィンドウ・ポインタ 新しく作成されたサブウィンドウに対応するウィンドウ構造体のインスタンスへのポインタ。
ERR エラーを示します。


前へ 次へ 目次 索引



         印刷用画面へ

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