Chapter Contents |
Previous |
Next |
mbtowc |
Portability: | ISO/ANSI C conforming |
SYNOPSIS | |
DESCRIPTION | |
RETURN VALUE | |
CAUTIONS | |
EXAMPLE |
SYNOPSIS |
#include <stdlib.h> int mbtowc(wchar_t *pwc, const char *s, size_t n);
DESCRIPTION |
mbtowc
determines how many bytes are needed to represent the multibyte
character pointed to by
s
.
If
s
is not
NULL
,
mbtowc
then stores the corresponding wide character in the array pointed
to by
pwc
.
n
specifies the maximum number of bytes to examine in the array pointed to by
pwc
.
RETURN VALUE |
If
s
is not
NULL
, the
return value is as follows:
0
|
is returned if
s
points to the null character. |
length of the multibyte character |
is returned if the next
n
or fewer bytes constitute a valid multibyte
character. |
-1
|
is returned if the next
n
or fewer bytes do not constitute a valid multibyte
character. |
If
s
is
NULL
, the return value
is as follows:
nonzero value | is returned if the current locale supports state-dependent encodings. |
0
|
is returned if the current locale does not support state-dependent encodings. |
CAUTIONS |
A diagnostic is not issued if
mbtowc
encounters invalid data; a return value
of
-1
is the only
indication of an error.
EXAMPLE |
This example finds a multibyte character
in a mixed DBCS string using
mbtowc
.
#include <locale.h> #include <limits.h> #include <stdlib.h> #include <stdio.h> /* "begstr" points to the beginning of a DBCS MIXED string. */ /* "mbc_sought" is the character value we're looking for. */ int mbfind(char *begstr, wchar_t int mbc_sought) { int mbclen; /* length (in bytes) of current character */ wchar_t mbc; /* value of current character */ char *strptr; /* pointer to current location in string */ strptr = begstr; /* Inform library that we will be accepting a DBCS string.*/ /* That is, SO and SI are not regular control characters: */ /* they indicate a change in shift state. */ setlocale(LC_ALL, "dbcs"); /* Reset to initial shift state. (A valid mixed string */ /* must begin in initial shift state). */ mbtowc((wchar_t *)NULL, NULL, 0); /* One loop iteration per character. Advance "strptr" by */ /* number of bytes consumed. */ while (mbclen = mbtowc(&mbc, strptr, MB_LEN_MAX)) { if (mbclen < 0) { fputs("Invalid pure DBCS string\n", stderr); abort(); } if (mbc == mbc_sought) break; strptr += mbclen; } /* Last character was not '\0' -- must have found it */ if (mbclen) { printf("MBFIND: found at byte offset %d\n", strptr - begstr); return 1; } else { puts("MBFIND: character not found\n"); return 0; } }
Chapter Contents |
Previous |
Next |
Top of Page |
Copyright © 2001 by SAS Institute Inc., Cary, NC, USA. All rights reserved.