MBSTOWCS - Linux手册页
时间:2019-08-20 18:00:52 来源:igfitidea点击:
Linux程序员手册 第3部分
更新日期: 2020-06-09
名称
mbstowcs-将多字节字符串转换为宽字符字符串
语法
#include <stdlib.h> size_t mbstowcs(wchar_t *dest, const char *src, size_t n);
说明
如果dest不为NULL,则mbstowcs()函数将多字节字符串src转换为以dest开始的宽字符字符串。最多将n个宽字符写入dest。字符串src中的字符序列应从初始移位状态开始。转换可能由于以下三个原因而停止:
- 1.
- 遇到无效的多字节序列。在这种情况下,将返回(size_t)-1。
- 2.
- n个非Laq \ 0aq宽字符已存储在dest。在这种情况下,返回了写入dest的宽字符数,但是此时的移位状态丢失了。
- 3.
- 多字节字符串已完全转换,包括终止的空字符(aq \ 0aq)。在这种情况下,将返回写入dest的宽字符数,但不包括终止的空宽字符。
程序员必须确保目标处至少有n个宽字符的空间。
如果dest为NULL,则n将被忽略,并且转换按上述方式进行,只是不将转换后的宽字符写出到内存中并且不存在长度限制。
为了避免上述情况2,程序员应确保n大于或等于mbstowcs(NULL,src,0)+1。
返回值
mbstowcs()函数返回组成宽字符字符串的转换部分的宽字符数,不包括终止的空宽字符。如果遇到无效的多字节序列,则返回(size_t)-1。
属性
有关本节中使用的术语的说明,请参见attribute(7)。
Interface | Attribute | Value |
mbstowcs() | Thread safety | MT-Safe |
遵循规范
POSIX.1-2001,POSIX.1-2008,C99。
示例
下面的程序说明了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
Program source
#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 */ wchar_t *wp; 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 (Laq##代码##aq). */ wcs = calloc(mbslen + 1, sizeof(wchar_t)); 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 (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(aq\naq); } exit(EXIT_SUCCESS); }
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。