これらの関数のほとんどは、SunOS 5.6 の標準ライブラリlibc のワイド文字列処理関数に基づくマクロです。ここで説明する関数は、過去の日本語システムの日本語用ライブラリ仕様と互換性を保つために提供されています。これらの関数を使用するためにはwidec.h ではなく、/usr/include/wstring.h を取り込んでください。ワイド文字列処理関数 (マクロ) を表 A-1 に示します。
表 A-1 ワイド文字列処理関数|
関数 |
機能 |
|---|---|
|
文字列を追加します |
|
|
指定文字数分だけ文字列を追加します |
|
|
文字列同士の比較を行います |
|
|
指定文字数分だけ文字列同士の比較を行います |
|
|
文字列をコピーします |
|
|
指定文字数分だけ文字列をコピーします |
|
|
malloc を使って文字列をコピーします |
|
|
指定文字が最初に現れた文字位置を返します |
|
|
指定文字が最後に現れた文字位置を返します |
|
|
指定文字列で構成される最初の長さを返します |
|
|
指定文字列以外で構成される最初の長さを返します |
|
|
指定文字列内の文字が最初に現れた文字位置を返します |
|
|
文字列の文字数を返します |
|
|
指定文字で分離される文字列を切り出します |
また、次の表 A-2 で示す関数は、国際化機能に基づかない日本語固有の日本語処理を含んでおり、libjapanese で提供されます。
表 A-2 日本語固有のワイド文字列処理関数|
関数 |
機能 |
|---|---|
|
主および補助コードセット文字列を long 整数に変換します |
|
|
主および補助コードセット文字列を倍精度に変換します |
例 A-1 に、このワイド文字列処理関数を使って、標準入力ファイル内の主および補助コードセットで書かれた数の合計を計算するプログラム例を紹介します。このプログラムでは、getws(3I) 関数で行単位にファイルを読み込んだ後、wstrpbrk(3X) を操作させて整数を求めています。
sun% cat example1.c
#include <stdio.h>
#include <locale.h>
#include <wstring.h>
main()
{
int total = 0;
long token;
wchar_t wbuf[256];
wchar_t *wptr;
static char *number = "01234567890123456789";
static wchar_t wnumber[21];
setlocale(LC_ALL, "");
if (mbstowcs(wnumber, number, 20) <= 0) {
printf("数字列が認識できません。¥n");
exit(1);
}
while (getws(wbuf) != NULL) {
wptr = wbuf;
while (wptr && *wptr) {
wptr = wstrpbrk(wptr, wnumber);
if (wptr) {
token = wstrtol(wptr, &wptr, 10);
printf("トークンの値 = [%d]¥n", token);
total += token;
}
}
}
printf("合計は %d です。¥n", total);
}
sun% cat 入力ファイル 1
343 34534
345345 345345
39857 398 5834589
sun% cc -o example1 example1.c -lw -ljapanese
sun% ./example1 < 入力ファイル 1
トークンの値 = [343]
トークンの値 = [34534]
トークンの値 = [345345]
トークンの値 = [345345]
トークンの値 = [39857]
トークンの値 = [398]
トークンの値 = [5834589]
合計は 6600411 です。
sun%