Home C&C++函数库 c++ 语法 程序源码 Linux C库


wcsrtombs

函数  <cwchar>

size_t wcsrtombs (char* dest, const wchar_t** src, size_t max, mbstate_t* ps);
转换宽字符字符串为多字节字符串

将src间接指向的C宽字符串的max个字符转换为其多字节序列等效值, 并将其存储在dest指向的缓冲区中, 如果遇到终止的空宽字符(也会转换和存储,但不计入函数返回的长度),则停止。

该函数使用(并更新)由ps描述的转换状态。如果ps是一个空指针, 则该函数使用自己的内部转换状态,只有调用该函数才会在必要时改变该状态。

如果该函数转换了整个C宽字符串(直到它找到一个空宽字符), 而dest不是空指针,则该函数将src设置为空指针值,并且结果状态保证是初始转换状态。

这个函数的行为取决于所选C语言环境的LC_CTYPE类型。

这是wcstombs (<cstdlib>)的 restartable 版本。

☲  参数



dest
指向char元素数组的指针,该数组的长度足以存储max字节数的C字符串。
如果这是一个空指针,函数不存储结果序列, 但仍然计算需要多少字节来存储src的转换(在这种情况下,参数max被忽略)。

src
指向要转换的C宽字符串的指针(间接指针)。
如果转换提前停止,该值将被函数修改为指向经过转换的最后一个宽字符, 如果函数到达结束空字符,则指向空指针。

max
要写入dest的最大字节数。
size_t是一个无符号整型。

ps
指向定义转换状态的mbstate_t对象的指针。

☉  返回值



写入dest的字节数(不包括最终终止的空字符)。
如果在转换过程中,函数遇到一个没有有效多字节序列等效的宽字符, 则该函数将errno设置为EILSEQ并返回(size_t)-1 (src将指向第一个不能被转换的字符。

注意,size_t是一个无符号整型,因此返回的值可能都不小于零。

☣  示例



/* wcsrtombs example */
#include <stdio.h>
#include <wchar.h>

int main() {
  const wchar_t str[] = L"wcstombs example";
  const wchar_t * p;
  mbstate_t mbs;
  char buffer[32];
  int ret;

  mbrlen (NULL,0,&mbs);    /* initialize mbs */

  printf ("wchar_t string: %ls \n",str);

  p = str;
  ret = wcsrtombs ( buffer, &p, sizeof(buffer), &mbs );
  if (ret==32) buffer[31]='\0';
  if (ret) printf ("multibyte string: %s \n",buffer);

  return 0;
}

输出:
wchar_t string: wcstombs example
multibyte string:  wcstombs example 


🍄  另请参阅



wcstombs 转换宽字符字符串为多字节字符串(function )
mbrlen 获取多字节字符的宽度(function )
mbsrtowcs 转换多字节字符串到宽字符字符串(function)
wcrtomb 转换宽字符为多字节序列(function)

联系我们 免责声明 关于CandCplus 网站地图