MBSTOWCS

Section: Linux Programmer's Manual (3)
Updated: 2020-11-01
Index JM Home Page
 

名前

mbstowcs - マルチバイト文字列をワイド文字列に変換する  

書式

#include <stdlib.h>

size_t mbstowcs(wchar_t *dest, const char *src, size_t n);
 

説明

If dest is not NULL, the mbstowcs() function converts the multibyte string src to a wide-character string starting at dest. At most n wide characters are written to dest. The sequence of characters in the string src shall begin in the initial shift state. The conversion can stop for three reasons:
1.
不正なマルチバイト列に遭遇した。この場合には (size_t) -1 を返す。
2.
n 文字の L'\0' 以外のワイド文字を dest に格納した場合。 この場合は *src が次に変換されるマルチバイト列を指すようにして、 dest に書き込まれたワイド文字の数を返す。しかしこの指している 場所のシフト状態は失われる。
3.
マルチバイト文字列が終端のヌル文字 ('\0') まで含めて完全に変換された場合。この場合は終端のヌルワイド文字を除いて dest に書き込まれた文字数を返す。

プログラマーは dest に最低でも n ワイド文字を書き込むこ とができる空間があることを保証しなければならない。

dest が NULL の場合、n は無視され、上記と同様の変換が 行われるが、変換されたワイド文字はメモリーに書き込まれず、変換先の上限 が存在しない。

上記の 2. の場合を避けるためにプログラマーは n が mbstowcs(NULL,src,0)+1 以上であることを保証すべきである。  

返り値

mbstowcs() 関数はワイド文字列に変換完了したワイド文字の数を返す。 終端のヌルワイド文字は含まない。不正なマルチバイト列に遭遇した場合には (size_t) -1 を返す。  

属性

この節で使用されている用語の説明については、 attributes(7) を参照。
インターフェース 属性 値
mbstowcs() Thread safety MT-Safe
 

準拠

POSIX.1-2001, POSIX.1-2008, C99.  

注意

mbstowcs() の動作は現在のロケールの LC_CTYPE カテゴリーに依存している。

mbsrtowcs(3) 関数は同じ機能のより良いインターフェースを提供する。  

例

下記のプログラムは mbstowcs() といくつかのワイド文字分類関数の使用方法を示したものである。実行例は以下のようになる。

$ ./t_mbstowcs de_DE.UTF-8 Grüße! Length of source string (excluding terminator):
    8 bytes
    6 multibyte characters

Wide character string is: Grüße! (6 characters)
    G alpha upper
    r alpha lower
    ü alpha lower
    ß alpha lower
    e alpha lower
    ! !alpha  

プログラムのソース

#include <wctype.h> #include <locale.h> #include <wchar.h> #include <stdio.h> #include <string.h> #include <stdlib.h>

int main(int argc, char *argv[]) {
    size_t mbslen;      /* Number of multibyte characters in source */
    wchar_t *wcs;       /* Pointer to converted wide character string */


    if (argc < 3) {
        fprintf(stderr, "Usage: %s <locale> <string>\n", argv[0]);
        exit(EXIT_FAILURE);
    }


    /* Apply the specified locale */


    if (setlocale(LC_ALL, argv[1]) == NULL) {
        perror("setlocale");
        exit(EXIT_FAILURE);
    }


    /* Calculate the length required to hold argv[2] converted to
       a wide character string */


    mbslen = mbstowcs(NULL, argv[2], 0);
    if (mbslen == (size_t) -1) {
        perror("mbstowcs");
        exit(EXIT_FAILURE);
    }


    /* Describe the source string to the user */


    printf("Length of source string (excluding terminator):\n");
    printf("    %zu bytes\n", strlen(argv[2]));
    printf("    %zu multibyte characters\n\n", mbslen);


    /* Allocate wide character string of the desired size.  Add 1
       to allow for terminating null wide character (L'\0'). */


    wcs = calloc(mbslen + 1, sizeof(*wcs));
    if (wcs == NULL) {
        perror("calloc");
        exit(EXIT_FAILURE);
    }


    /* Convert the multibyte character string in argv[2] to a
       wide character string */


    if (mbstowcs(wcs, argv[2], mbslen + 1) == (size_t) -1) {
        perror("mbstowcs");
        exit(EXIT_FAILURE);
    }


    printf("Wide character string is: %ls (%zu characters)\n",
            wcs, mbslen);


    /* Now do some inspection of the classes of the characters in
       the wide character string */


    for (wchar_t *wp = wcs; *wp != 0; wp++) {
        printf("    %lc ", (wint_t) *wp);


        if (!iswalpha(*wp))
            printf("!");
        printf("alpha ");


        if (iswalpha(*wp)) {
            if (iswupper(*wp))
                printf("upper ");


            if (iswlower(*wp))
                printf("lower ");
        }


        putchar('\n');
    }


    exit(EXIT_SUCCESS); }  

関連項目

mblen(3), mbsrtowcs(3), mbtowc(3), wcstombs(3), wctomb(3)  

この文書について

この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。

関連キーワード

character   printf   ワイド   wide   characters   argv   mbstowcs   size   alpha   mbslen   exit   マルチバイト   multibyte   lower   wchar   perror   終端   locale   stdlib   不正   遭遇   ヌルワイド   プログラマー   保証   上記

Linux マニュアル 一覧

関連するコマンド・関数

wcstombs.3   mbsnrtowcs.3   mbsrtowcs.3   iswalpha.3   mbrtowc.3   wcsnrtombs.3
 

Index

名前
書式
説明
返り値
属性
準拠
注意
例
プログラムのソース
関連項目
この文書について

This document was created by man2html, using the manual pages.
Time: 04:39:31 GMT, October 11, 2026