Man page - mbstowcs(3)

Packages contains this manual

Available languages:

en fr ja ru

Manual

MBSTOWCS

名 前
書 式
説 明
返 り 値
属 性
準 拠
注 意

プ ロ グ ラ ム の ソ ー ス
関 連 項 目
こ の 文 書 に つ い て

名 前

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) を 参 照 。

Image grohtml-22226-1.png

準 拠

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