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


前へ 次へ 目次 索引



strtoq, strtoll (Alpha only)

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 only)

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 エラーを示します。


swab

バイトをスワップします。

形式

#include <unistd.h>

void swab (const void *src, void *dest, ssize_t nbytes);


引数

src

コピーする文字列の位置へのポインタ。

dest

結果のコピー先へのポインタ。

nbytes

コピーするバイト数。この引数は偶数値にしてください。奇数値だった場合, swab関数は代わりに nbytes - 1 を使用します。

説明

swab関数は,nbytes によって指定されたバイト数を, src がポイントする位置から dest がポイントする配列にコピーします。その後,関数は隣接するバイトを交換します。コピーが互いにオーバラップするオブジェクトの間で行われた場合の結果は未定義です。

swprintf

ワイド文字書式文字列の制御下で,ワイド文字の配列に出力を書き込みます。

形式

#include <wchar.h>

int swprintf (wchar_t *s, size_t n, const wchar_t *format, ...);


引数

s

結果として得られるワイド文字シーケンスへのポインタ。

n

s がポイントする配列に書き込むことができるワイド文字の数の最大値。終端の null ワイド文字を含みます。

format

書式指定を含んだワイド文字列へのポインタ。書式指定と変換指定,およびその対応する引数については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 2 章を参照してください。

...

結果として得られる型が,書式指定で与えられた変換指定に対応しているオプションの式。

変換指定が与えられなかった場合,出力ソースは省略することができます。そうでない場合は,関数呼び出しは変換指定と同じ数の出力ソースを持っていなくてはならず,変換指定は出力ソースの型と一致していなくてはなりません。

変換指定は,左から右の順序で出力ソースと照合されます。余分な出力ポインタがある場合には,無視されます。


説明

swprintf関数は,第 1 引数がストリームではなくワイド文字の配列を指定しているという点を除けば, fwprintf関数と等価です。

書き込まれるワイド文字の数は,終端の null ワイド文字を含めて, n 個以下です。終端の null ワイド文字は (n が 0 でなければ) つねに追加されます。

fwprintfも参照してください。


戻り値

x 書き込まれたワイド文字の数。終端の null ワイド文字は含みません。
負の値 エラーを示します。 n 個以上のワイド文字の書き込みが要求されたか,変換エラーが発生しました。後者の場合, errno は EILSEQ に設定されます。


前へ 次へ 目次 索引