WCSNRTOMBS - Linux手册页

时间:2019-08-20 18:01:38  来源:igfitidea点击:

Linux程序员手册 第3部分
更新日期: 2019-03-06

名称

wcsnrtombs-将宽字符字符串转换为多字节字符串

语法

#include <wchar.h>

size_t wcsnrtombs(char *dest, const wchar_t **src, size_t nwc,
                  size_t len, mbstate_t *ps);

glibc的功能测试宏要求(请参阅feature_test_macros(7)):

wcsnrtombs():

Since glibc 2.10:
_POSIX_C_SOURCE>= 200809L
Before glibc 2.10:
_GNU_SOURCE

说明

wcsnrtombs()函数类似于wcsrtombs(3)函数,但是要转换的宽字符数(从* src开始)限制为nwc。

如果dest不为NULL,则wcsnrtombs()函数最多将nwc个宽字符从宽字符字符串* src转换为以dest开始的多字节字符串。最多len个字节被写入dest。移位状态* ps被更新。只要此调用成功,就可以通过重复调用wcrtomb(dest,* src,ps)来有效地执行转换,然后将dest增加写入的字节数,并将* src增加1。转换可能由于以下三个原因而停止:

1.
遇到了一个宽字符,无法将其表示为多字节序列(根据当前语言环境)。在这种情况下,* src指向无效的宽字符,返回(size_t)-1,并将errno设置为EILSEQ。
2.
已转换nwc宽字符而未遇到空宽字符(Laq \ 0aq),或者长度限制强制停止。在这种情况下,* src指向要转换的下一个宽字符,并返回写入dest的字节数。
3.
宽字符字符串已经完全转换,包括终止的空宽字符(其副作用是使* ps返回初始状态)。在这种情况下,* src设置为NULL,并且返回写入dest的字节数(不包括终止空字节(aq \ 0aq))。

如果dest为NULL,则len被忽略,并且转换按上述方式进行,只是不将转换后的字节写出到内存中,并且不存在目标长度限制。

在上述两种情况下,如果ps为NULL,则使用仅wcsnrtombs()函数已知的静态匿名状态。

程序员必须确保目标处至少有len个字节的空间。

返回值

wcsnrtombs()函数返回组成多字节序列的已转换部分的字节数,不包括终止的空字节。如果遇到无法转换的宽字符,则返回(size_t)-1,并将errno设置为EILSEQ。

属性

有关本节中使用的术语的说明,请参见attribute(7)。

InterfaceAttributeValue
wcsnrtombs()Thread safetyMT-Unsafe race:wcsnrtombs/!ps

遵循规范

POSIX.1-2008。

备注

wcsnrtombs()的行为取决于当前语言环境的LC_CTYPE类别。

作为ps传递NULL不是多线程安全的。

另外参见

iconv(3),mbsinit(3),wcsrtombs(3)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/