MBSTOWCS

Section: Linux Programmer's Manual (3)
Updated: 2020-11-01
IndexJM 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 nwide 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. の場合を避けるためにプログラマーは nmbstowcs(NULL,src,0)+1 以上であることを保証すべきである。 

返り値

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

属性

この節で使用されている用語の説明については、 attributes(7) を参照。
インターフェース属性
mbstowcs()Thread safetyMT-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;      
    wchar_t *wcs;       


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


    


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


    


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


    


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


    


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


    


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


    


    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/ に書かれている。


関連キーワード

string,mbstowcs,character,dest,size,mbslen,wcs,include,characters,MBSTOWCS 

Index

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

This document was created byman2html, using the manual pages.
Time: 03:39:08 GMT, June 22, 2021