日本-日本語
日本HPホーム 製品 & サービス OpenVMS製品情報
≫  お問い合わせ


OpenVMS マニュアル


 

OpenVMS ドキュメント
ライブラリ

タイトルページ
目次
まえがき
第 1 章:はじめに
第 2 章:入出力について
第 3 章:文字/文字列/引数リスト関数
第 4 章:エラー処理とシグナル処理
第 5 章:サブプロセス関数
第 6 章:Curses画面管理関数とマクロ
第 7 章:算術関数
第 8 章:メモリ割り当て関数
第 9 章:システム関数
第 10 章:国際化ソフトウェアの開発
第 11 章:日付/時刻関数
第 12 章:シンボリックリンクとPOSIXパス名
付録 A:各OSバージョンでサポートする関数一覧
付録 B:非標準ヘッダに複製されているプロトタイプ
索引
PDF
OpenVMS ホーム

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


目次 索引

例 3-1 は文字分類関数の使い方を示しています。

例 3-1 文字分類関数
/*       CHAP_3_CHARCLASS.C                                     */ 
 
/* This example uses the isalpha, isdigit, and isspace          */ 
/* functions to count the number of occurrences of letters,     */ 
/* digits, and white-space characters entered through the       */ 
/* standard input (stdin).                                      */ 
 
#include <ctype.h> 
#include <stdio.h> 
#include <stdlib.h> 
 
main() 
{ 
    char c; 
    int i = 0, 
        j = 0, 
        k = 0; 
 
    while ((c = getchar()) != EOF) { 
        if (isalpha(c)) 
            i++; 
        if (isdigit(c)) 
            j++; 
        if (isspace(c)) 
            k++; 
    } 
 
    printf("Number of letters: %d\n", i); 
    printf("Number of digits:  %d\n", j); 
    printf("Number of spaces:  %d\n", k); 
} 

次の例は, 例 3-1 へのサンプル入力とサンプル出力を示しています。

$ RUN  EXAMPLE1
I saw 35 people riding bicycles on Main Street.[Return]
[Ctrl/Z]
Number of letters: 36
Number of digits:  2
Number of spaces:  8
$ 



3.2 文字変換関数

文字変換関数は,ある種類の文字を別の種類に変換します。次の関数があります。

ecvt         _tolower 
fcvt         toupper 
gcvt         _toupper 
mbtowc       towctrans 
mbrtowc      wctrans 
mbsrtowcs    wcrtomb 
toascii      wcsrtombs 
tolower 

これらの各関数の詳細については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル (下巻)』「リファレンス・セクション」を参照してください。

例 3-2 は, ecvt関数の使い方を示しています。

例 3-2 倍精度値から ASCII 文字列への変換
/*     CHAP_3_CHARCONV.C                                        */ 
 
/* This program uses the ecvt function to convert a double      */ 
/* value to a string. The program then prints the string.       */ 
 
#include <stdio.h> 
#include <stdlib.h> 
#include <unixlib.h> 
#include <string.h> 
 
main() 
{ 
 
    double val;         /* Value to be converted */ 
 
    int sign,           /* Variables for sign   */ 
        point;          /* and decimal place    */ 
 
    /*  Array for the converted string  */ 
    static char string[20]; 
 
    val = -3.1297830e-10; 
 
    printf("original value: %e\n", val); 
    if (sign) 
        printf("value is negative\n"); 
    else 
        printf("value is positive\n"); 
    printf("decimal point at %d\n", point); 
} 

例 3-2 からの出力は次のようになります。

$ RUN  EXAMPLE2
original value: -3.129783e-10
converted string: 31298
value is negative
decimal point at -9
$ 

例 3-3toupper関数と tolower関数の使い方を示しています。

例 3-3 大文字と小文字の変更
/*     CHAP_3_CONV_UPPERLOWER.C                                 */ 
 
/* This program uses the functions toupper and tolower to       */ 
/* convert uppercase to lowercase and lowercase to uppercase    */ 
/* using input from the standard input (stdin).                 */ 
 
#include <ctype.h> 
#include <stdio.h>      /*  To use EOF identifier */ 
#include <stdlib.h> 
 
main() 
{ 
    char c, 
         ch; 
 
    while ((c = getchar()) != EOF) { 
        if (c >= 'A' && c <= 'Z') 
            ch = tolower(c); 
        else 
            ch = toupper(c); 
        putchar(ch); 
    } 
} 

次の例は 例 3-3 へのサンプル入力とサンプル出力を示しています。

$ RUN  EXAMPLE3
LET'S GO TO THE welcome INN.[Ctrl/Z]
let's go to the WELCOME inn.
$ 



3.3 文字列および引数リスト関数

HP C RTL には,文字列を操作する関数グループがあります。これらの関数には,文字列を連結する関数,文字列から特定の文字を検索する関数, 2 つの文字列が等しいかどうか判断する関数など,その他の比較を実行する関数があります。

HP C RTL には,バイナリ・データが格納されているバッファをコピーするための関数も用意されています。

<varargs.h>および <stdarg.h>ヘッダ・ファイルに定義および宣言されている関数は,可変長引数リストにアクセスするために使用できます。 <stdarg.h>関数は ANSI C 標準で定義されており, <varargs.h>に定義されている関数より高い移植性を備えています。

たとえば printfexeclなどの RTL 関数では,可変長引数リストを使用します。可変長引数リストを使用するユーザ定義関数で <varargs.h><stdarg.h>を使用しない場合は,マシン間で引数の受け渡し規則が異なるため,移植することができません。

<stdarg.h>ヘッダ・ファイルには, va_alist および va_dclが含まれていません。次の構文の例は, <stdarg.h>を使用する場合の構文を示しています。

function_name(int arg1, ...) 
{ 
va_list  ap; 
   .
   .
   .

<varargs.h>を使用する場合は,次のようになります。

  • 識別子 va_alist は関数定義に含まれるパラメータです。

  • va_dclはパラメータ va_alist を宣言します。これはセミコロン (;) で終了しない宣言です。

  • va_list型は,リスト内を移動するために使用される変数の宣言で使用されます。 <varargs.h>を使用する場合は, va_list型の変数を少なくとも 1 つ宣言する必要があります。

これらの名前および宣言の構文は次のとおりです。

function_name(int arg1, ...) 
{ 
va_list  ap; 
. 
. 
. 



3.4 プログラムの例

例 3-4 は, strcat関数と strncat関数の使い方を示しています。

例 3-4 2 つの文字列の結合
/*        CHAP_3_CONCAT.C                                      */ 
 
/*  This example uses strcat and strncat to concatenate two    */ 
/*  strings.                                                   */ 
 
#include <stdio.h> 
#include <string.h> 
 
main() 
{ 
    static char string1[80] = "Concatenates "; 
    static char string2[] = "two strings "; 
    static char string3[] = "up to a maximum of characters."; 
    static char string4[] = "imum number of characters"; 
 
    printf("strcat:\t%s\n", strcat(string1, string2)); 
    printf("strncat ( 0):\t%s\n", strncat(string1, string3, 0)); 
    printf("strncat (11):\t%s\n", strncat(string1, string3, 11)); 
    printf("strncat (40):\t%s\n", strncat(string1, string4, 40)); 
} 

例 3-4 は次の出力を生成します。

$ RUN  EXAMPLE1
strcat: Concatenates two strings
strncat ( 0): Concatenates two strings
strncat (11): Concatenates two strings up to a max
strncat (40): Concatenates two strings up to a maximum number of characters.
$ 

例 3-5strcspn関数の使い方を示しています。

例 3-5 strcspn 関数に対する 4 つの引数
/*        CHAP_3_STRCSPN.C                                     */ 
 
/*  This example shows how strcspn interprets four             */ 
/*  different kinds of arguments.                              */ 
 
#include <stdio.h> 
 
main() 
{ 
 
    printf("strcspn with null charset: %d\n", 
            strcspn("abcdef", "")); 
 
    printf("strcspn with null string: %d\n", 
            strcspn("", "abcdef")); 
 
    printf("strcspn(\"xabc\", \"abc\"): %d\n", 
           strcspn("xabc", "abc")); 
 
    printf("strcspn(\"abc\", \"def\"): %d\n", 
            strcspn("abc", "def")); 
} 

例 3-5 を呼び出すと, strcspn.outファイルに次のサンプル出力が生成されます。

$ RUN  EXAMPLE2 
 
strcspn with null charset:  6 
strcspn with null string:  0 
strcspn("xabc","abc"):  1 
strcspn("abc","def"):  3 

例 3-6 は, <stdarg.h>関数および定義の使い方を示しています。

例 3-6 <stdarg.h > 関数と定義の使用
/*        CHAP_3_STDARG.C                                       */ 
 
/* This routine accepts a variable number of string arguments,  */ 
/* preceded by a count of the number of such strings. It        */ 
/* allocates enough space in which to concatenate all of the    */ 
/* strings, concatenates them together, and returns the address */ 
/* of the new string. It returns NULL if there are no string    */ 
/* arguments, or if they are all null strings.                  */ 
 
#include <stdarg.h>       /* Include appropriate header files   */ 
#include <stdlib.h>       /* for the "example" call in main.    */ 
#include <string.h> 
#include <stdio.h>      
 
/* NSTRINGS is the maximum number of string arguments accepted  */ 
/* (arbitrary).                                                 */ 
 
#define NSTRINGS 10 
 
char *concatenate(int n,...) 
{ 
    va_list ap;         /* Declare the argument pointer. */ 
     
    char *list[NSTRINGS], 
        *string; 
    int index = 0, 
        size = 0; 
 
    /* Check that the number of arguments is within range.   */ 
 
    if (n <= 0) 
        return NULL; 
    if (n > NSTRINGS) 
        n = NSTRINGS; 
 
    va_start(ap, n);    /* Initialize the argument pointer.  */ 
 
    do { 
        /* Extract the next argument and save it. */ 
 
        list[index] = va_arg(ap, char *); 
 
        size += strlen(list[index]); 
    } while (++index < n); 
   
    va_end(ap); /* Terminate use of ap. */ 
 
    if (size == 0) 
        return NULL; 
 
    string = malloc(size + 1); 
    string[0] = '\0'; 
 
    /* Append each argument to the end of the growing result    */ 
    /*  string.                                                 */ 
 
    for (index = 0; index < n; ++index) 
        strcat(string, list[index]); 
 
    return string; 
} 
 
/* An example of calling this routine is */ 
 
main() { 
    char *ret_string ; 
 
    ret_string = concatenate(7, "This ", "message ", "is ", 
                                "built with ", "a", " variable arg", 
                                " list.") ; 
 
    puts(ret_string) ; 
} 

例 3-6 を呼び出すと,次の出力が生成されます。

This message is built with a variable arg list. 


目次 索引

© 2012 Hewlett-Packard Development Company, L.P.