WCSWIDTH(3C) | Standard C Library Functions | WCSWIDTH(3C) |
wcswidth
,
wcswidth_l
— determine
number of columns for wide-character string
#include
<wchar.h>
int
wcswidth
(const wchar_t *str,
size_t len);
#include <wchar.h>
#include <xlocale.h>
int
wcswidth_l
(const wchar_t *str,
size_t len, locale_t loc);
The
wcswidth
()
and wcswidth_l
() functions count the total number of
columns that are required to display the contents of the wide-character
string str. For each wide-character in the string
str, the equivalent of
wcwidth(3C) is called and the result
summed to a running total which is returned.
Up to len wide-characters from str will be evaluated; however, the functions will stop iterating if they encounter the null wide-character (L'\0').
The wide-characters in str
must be valid characters in the current locale or in the case of the
wcswidth_l
()
function, the locale specified by loc. The functions
will fail if any of the wide-characters in str are
valid in the current locale, but considered non-printable (as in
iswprint(3C) would fail for the
character) or the wide-character does not represent a valid character in the
locale.
Upon successful completion, the wcswidth
()
and wcswidth_l
() functions return the total number
of columns that are required to display the wide-character string.
Otherwise, -1 is
returned to indicate that an invalid or non-printable wide-character was
encountered.
Example
1 Using the wcswidth
() function to count
characters in a string.
#include <wchar.h> #include <stdio.h> int main(void) { wchar_t *str = L"Hello world"; int ret = wcswidth(str, wcslen(str)); (void) printf("wcswidth returned: %d\n", ret); return (0); }
When compiled and run, this program outputs:
$ gcc -Wall -Wextra example.c $ ./a.out wcswidth returned: 11
The
wcswidth
()
function is MT-Safe as long as the thread-specific or
global locale is not changed while it is running.
The
wcswidth_l
()
function is MT-Safe as long as the locale
loc is not freed while the function is running.
iswprint(3C), newlocale(3C), setlocale(3C), uselocale(3C), wcwidth(3C)
September 15, 2024 | OmniOS |