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


前へ 次へ 目次 索引



wcsstr

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

形式

#include <wchar.h>

wchar_t *wcsstr (const wchar_t *s1, const wchar_t *s2);

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

引数

s1, s2

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

説明

s2 が長さ 0 のワイド文字列をポイントしている場合, wcsstr関数は s1 を返します。

戻り値

x 発見された文字列へのポインタ。
NULL エラーを示します。文字列は発見されませんでした。


wcstod

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

形式

#include <wchar.h>

double wcstod (const wchar_t *nptr, wchar_t **endptr);


引数

nptr

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

endptr

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

説明

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

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

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

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

文字列が認識不可能なワイド文字で始まる場合, *endptrnptr に設定され,値 0 が返されます。


戻り値

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

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

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

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

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


wcstok

指定されたワイド文字列の中でテキスト・トークンを探します。

形式

#include <wchar.h>

wchar_t *wcstok (wchar_t *ws1, const wchar_t *ws2); (XPG4)

wchar_t *wcstok (wchar_t *ws1, const wchar_t *ws2, wchar_t **ptr); (ISO C)

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

引数

ws1

ゼロ個以上のテキスト・トークンを含んだワイド文字列へのポインタ。

ws2

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

ptr

ISO C 標準のみ。ws1 が NULL の場合にのみ使用されます。 ptr は, wcstokが同じワイド文字列のスキャンを続行するために必要な情報を格納する,呼び出し元が提供する wchar_tポインタです。

説明

wcstokの一連の呼び出しにより, ws1 がポイントするワイド文字列を, ws2 がポイントするワイド文字列に含まれているワイド文字で区切られたトークンのシーケンスに分割することができます。

wcstok関数は,次の呼び出しがあるまでのワイド文字列中の自分の位置を保持しており,その後の呼び出しがあったときに,前の呼び出しで識別されたテキスト・トークンの次のテキスト・トークンを識別してワイド文字列の中を移動します。

ws1 の中のトークンは, wcstokws1 に挿入する null 文字によって区切られます。このため, ws1constオブジェクトであってはなりません。

以下のセクションでは, wcstokの XPG4 標準および ISO C 標準インタフェースの違いを説明します。

XPG4 標準の動作

wcstok関数の最初の呼び出しでは,ワイド文字列の中で,ws2 がポイントする区切り文字列に含まれていない最初の文字が検索されます。最初の呼び出しは,最初のトークンの最初のワイド文字へのポインタを返し, ws1 の中で,返されたトークンの直後に null ワイド文字を書き込みます。

wcstokのそれ以降の呼び出しでは, ws2 がポイントする区切り文字列に含まれている ワイド文字が検索されます。個々の呼び出しで (第 1 引数として値 NULL を指定),最初に ws1 がポイントしていた文字列の中の次のトークンへのポインタが返されます。文字列にトークンが残っていなかった場合, wcstokは NULL ポインタを返します。

ISO C 標準の動作

シーケンスの中の最初の呼び出しでは, ws1 はワイド文字列をポイントしています。同じ文字列に対するそれ以降の呼び出しでは,ws1 は NULL です。 ws1 が NULL の場合,ptr がポイントする値は,同じワイド文字列に対するそれ以前の呼び出しによって格納された値と一致します。それ以外の場合,ptr がポイントする値は無視されます。

シーケンスの中の最初の呼び出しは, ws1 がポイントするワイド文字列の中で, ws2 がポイントしている現在の区切りワイド文字列に含まれていない最初のワイド文字を検索します。そのようなワイド文字が見つからなかった場合には, ws1 がポイントするワイド文字列にはそのようなトークンが含まれていないということになり, wcstokは NULL ポインタを返します。

その後, wcstok関数は,現在の区切りワイド文字列に含まれているワイド文字を探します。そのようなワイド文字が見つからなかった場合には,現在のトークンは ws1 がポイントするワイド文字列の終わりまで続いていることになり,同じワイド文字列に対するそれ以降のトークンの検索は NULL ポインタを返します。そのようなワイド文字が見つかった場合には, null ワイド文字で上書きされ,現在のトークンは終了します。

どのケースでも, wcstokは, ptr がポイントするポインタに必要な情報を格納し, ws1 に対して NULL ポインタ, ptr に対して変更なしのポインタ値を指定したそれ以降の呼び出しが, null ワイド文字 (存在する場合) で上書きされた要素の直後から検索を開始するようにします。


戻り値

x トークンの最初の文字へのポインタ。
NULL トークンが見つからなかったことを示します。


#1

/* XPG4 version of wcstok call */ 
 
#include <wchar.h> 
#include <string.h> 
#include <stdio.h> 
 
main() 
{ 
    wchar_t str[] = L"...ab..cd,,ef.hi"; 
 
    printf("|%S|\n", wcstok(str, L".")); 
    printf("|%S|\n", wcstok(NULL, L",")); 
    printf("|%S|\n", wcstok(NULL, L",.")); 
    printf("|%S|\n", wcstok(NULL, L",.")); 
} 
 

#2

/* ISO C version of wcstok call */ 
 
#include <wchar.h> 
#include <string.h> 
#include <stdio.h> 
 
main() 
{ 
    wchar_t str[] = L"...ab..cd,,ef.hi"; 
    wchar_t *savptr = NULL; 
 
    printf("|%S|\n", wcstok(str, L".", &savptr)); 
    printf("|%S|\n", wcstok(NULL, L",", &savptr)); 
    printf("|%S|\n", wcstok(NULL, L",.", &savptr)); 
    printf("|%S|\n", wcstok(NULL, L",.", &savptr)); 
} 

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


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


wcstol

指定された底のワイド文字列を long の整数値に変換します。

形式

#include <wchar.h>

long int wcstol (const wchar_t *nptr, wchar_t **endptr, int base);

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

引数

nptr

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

endptr

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

base

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

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

base が 0 の場合,文字のシーケンスは,整定数を解釈するのに使用されるのと同じ規則で解釈されます。オプションの符号の後には,以下の文字を指定できます。


説明

wcstol関数は,底の値に応じて,さまざまな形式の文字列を認識します。この関数は,指定された文字列に含まれる先頭の空白文字 ( iswspace関数の定義に従う) を無視します。オプションのプラスまたはマイナス記号と,それに続く,底の値に応じた整定数を表現できる数字または英字のシーケンスを認識します。最初の認識不可能な文字が検出された時点で,変換は終了します。

戻り値

x 変換された値。
0 文字列が認識不可能なワイド文字で始まるか, base の値が無効であることを示します。文字列が認識不可能なワイド文字で始まる場合, * endptrnptr に設定されます。関数は errno を EINVAL に設定します。
LONG_MAX または LONG_MIN 変換された値が,それぞれ正または負のオーバフローを引き起こすことを示します。関数は errno を ERANGE に設定します。


wcstombs

ワイド文字コードのシーケンスをマルチバイト文字のシーケンスに変換します。

形式

#include <stdlib.h>

size_t wcstombs (char *s, const wchar_t *pwcs, size_t n);


引数

s

結果として得られるマルチバイト文字が格納される配列へのポインタ。

pwcs

ワイド文字コードのシーケンスを含んでいる配列へのポインタ。

n

s がポイントする配列に格納されるバイト数の最大値。

説明

wcstombs関数は, pwcs がポイントする配列の中のマルチバイト文字に対応するコードのシーケンスをマルチバイト文字のシーケンスに変換し,最高 n バイトまで,s がポイントする配列に格納します。返される値は,変換された文字数か,エラーが発生した場合には - 1 です。

この関数は,プログラムの現在のロケールの LC_CTYPE カテゴリの影響を受けます。

s が NULL の場合,この関数呼び出しはカウント操作になり, n は無視されます。

wctombも参照してください。


戻り値

x s に格納されたバイト数。終端の null バイトは含まれません。 s が NULL の場合, wcstombs はマルチバイト文字配列に必要なバイト数を返します。
( size_t ) - 1 エラーが発生したことを示します。関数は errno を,無効な文字シーケンス,すなわちワイド文字コードが有効な文字に対応していないことを示す EILSEQ に設定します。


wcstoul

nptr がポイントするワイド文字列の先頭の部分を unsigned long整数に変換します。

形式

#include <wchar.h>

unsigned long int wcstoul (const wchar_t *nptr, wchar_t **endptr, int base);

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

引数

nptr

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

endptr

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

base

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

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

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


説明

wcstoul関数は,底の値に応じて,さまざまな形式の文字列を認識します。この関数は,指定された文字列に含まれる先頭の空白文字 ( iswspace関数の定義に従う) を無視します。オプションのプラスまたはマイナス記号と,それに続く,底の値に応じた整定数を表現できる数字または英字のシーケンスを認識します。最初の認識不可能な文字が検出された時点で,変換は終了します。

戻り値

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



#include <stdlib.h> 
#include <stdio.h> 
#include <wchar.h> 
#include <errno.h> 
#include <limits.h> 
 
/* This test calls wcstoul() to convert a string to an     */ 
/* unsigned long integer. wcstoul outputs the resulting    */ 
/* integer and any characters that could not be converted. */ 
 
#define MAX_STRING 128 
 
main() 
{ 
 
    int base = 10, 
        errno; 
    char *input_string = "1234.56"; 
    wchar_t string_array[MAX_STRING], 
           *ptr; 
    size_t size; 
    unsigned long int val; 
    printf("base = [%d]\n", base); 
    printf("String to convert = %s\n", input_string); 
    if ((size = mbstowcs(string_array, input_string, MAX_STRING)) == 
 
        (size_t)-1) { 
 
        perror("mbstowcs"); 
        exit(EXIT_FAILURE); 
    } 
    printf("wchar_t string is = [%S]\n", string_array); 
 
    errno = 0; 
    val = wcstoul(string_array, &ptr, base); 
    if (errno == 0) { 
printf("returned unsigned long int from wcstoul = [%u]\n", val); 
      printf("wide char terminating scan(ptr) = [%S]\n\n", ptr); 
    } 
    if (errno == ERANGE) { 
        perror("error value is :"); 
        printf("ULONG_MAX = [%u]\n", ULONG_MAX); 
        printf("wcstoul failed, val = [%d]\n\n", val); 
    } 
 
} 

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


base = [10] 
String to convert = 1234.56 
wchar_t string is = [1234.56] 
returned unsigned long int from wcstoul = [1234] 
wide char terminating scan(ptr) = [.56] 


前へ 次へ 目次 索引